簡體   English   中英

LibVLCSharp MediaInput - 緩沖區太小,將所有讀取的文件保存在里面

[英]LibVLCSharp MediaInput - buffer to small too hold all readed file inside

我正在嘗試從低端相機播放.mp4 文件。 因為 VLC 不支持 http digest md5 auth,所以我必須實現 MediaInput class( 這里有一些代碼)。 但是在 Read() 方法中從 LibVLCSharp 傳遞的緩沖區太短,無法容納整個下載的文件。

我正在使用 HttpClient 讀取文件。 讀取數據存儲在byte [] readedBytes中。 字節被復制到使用從 LibVLCSharp 傳遞的指針和長度構造的 byteSpan。 在每次 Read() 調用中,程序讀取 1MB 的數據塊並復制到緩沖區,緩沖區的大小減小到小於 1 MB。 這會導致異常並導致無法播放完整的視頻文件。

    public unsafe override int Read(IntPtr buf, uint len)
        {
            ...

            Span<byte> byteSpan = new Span<byte>(buf.ToPointer(), (int)len);
            readedBytes.CopyTo(byteSpan);
        }

如何正確處理這個問題?

有沒有辦法增加緩沖區大小?

您不能增加 LibVLC 緩沖區大小,但可以在其他地方緩沖“額外”數據。

一些想法:

  • 將下一個要讀取的數據放入緩沖區(例如MemoryStream),並在下一次讀取時檢查MemoryStream是否有剩余數據
  • 實現生產者/消費者模式:程序的一部分從相機讀取文件,另一部分使用 LibVLC 媒體輸入的數據。 這可以通過System.IO.Pipelines管道來實現。 您可以在我的 repo 上的 PipeMediaInput 項目中找到一個使用示例: https://github.com/jeremyVignelles/libvlcsharp-nonfree-samples

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM