ShanxiKnowledgeBase/SXElectricalInspection/Assets/AVIDEO/AVideo/AVProVideo/Demos/Scripts/Scriptlets/LoadFromBufferInChunks.cs

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