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();
|
|
}
|
|
}
|
|
}
|
|
|