62 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
	
	
| using UnityEngine;
 | |
| using System.IO;
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| // Copyright 2015-2018 RenderHeads Ltd.  All rights reserverd.
 | |
| //-----------------------------------------------------------------------------
 | |
| 
 | |
| namespace RenderHeads.Media.AVProVideo.Demos
 | |
| {
 | |
| 	/// <summary>
 | |
| 	/// Demonstration of how to load from a video from a byte array.
 | |
| 	/// NOTE: Only Windows using DirectShow API currently supports this feature.
 | |
| 	/// </summary> 
 | |
| 	public class LoadFromBufferInChunks : MonoBehaviour
 | |
| 	{
 | |
| 		[SerializeField]
 | |
| 		private MediaPlayer _mp = null;
 | |
| 
 | |
| 		[SerializeField]
 | |
| 		private string _filename = string.Empty;
 | |
| 
 | |
| 		private void Start()
 | |
| 		{
 | |
| 			if (_mp != null)
 | |
| 			{
 | |
| 				int chunkSize = 512;
 | |
| 				byte[] chunk = new byte[chunkSize];
 | |
| 				FileStream fs = File.OpenRead(_filename);
 | |
| 				long fileSize = fs.Length;
 | |
| 				if (!_mp.StartOpenChunkedVideoFromBuffer((ulong)fileSize))
 | |
| 				{
 | |
| 					_mp.CloseVideo();
 | |
| 				}
 | |
| 
 | |
| 				ulong currOffset = 0;
 | |
| 				while (true)
 | |
| 				{
 | |
| 					int bytesRead = fs.Read(chunk, 0, chunkSize);
 | |
| 					if (bytesRead > 0)
 | |
| 					{
 | |
| 						if (!_mp.AddChunkToVideoBuffer(chunk, currOffset, (ulong)bytesRead))
 | |
| 						{
 | |
| 							_mp.CloseVideo();
 | |
| 						}
 | |
| 					}
 | |
| 					else break;
 | |
| 
 | |
| 					currOffset += (ulong)bytesRead;
 | |
| 				}
 | |
| 
 | |
| 				if (!_mp.EndOpenChunkedVideoFromBuffer())
 | |
| 				{
 | |
| 					_mp.CloseVideo();
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			System.GC.Collect();
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 |