我在 vb.net (winForms) 中有一个应用程序,我想用视频和音频 PID 播放有效的 TS。如果我使用应用程序本身的 TCP/UDP 协议进行流式传输,效果很好,但我想在不进行网络流的情况下进行流式传输。
我看到这可以使用 StreamMediaInput 完成,但我不知道该怎么做。
我有这个:
Private Sub WriteStream(ByVal Data() As Byte, ByVal len As Integer)
'Data() array is the video TS (MPEG-2) (188 bytes len)
vlc_memorystream.Write(Data, 0, len)
End Sub
将 TCP 流传输到 libvlcsharp 是可以的,我如何直接将 Data() 数组传递给 libvlcsharp?
谢谢你。
https://github.com/videolan/libvlcsharp
编辑:
我可以观看将这一行放入子内容中的流:
vlc_memorystream.Write(Data, 0, len)
问题在于缓冲区。它播放得很好,几秒钟后就停止播放。我该如何处理这个问题?
如此处所述:https://code.videolan.org/videolan/LibVLCSharp/-/issues/526#note_294698,MemoryStream 不会执行此操作,因为 libvlc 读取数据的速度比数据到达的速度快,并假设流是完成了。
您需要实现一个 Stream 来阻止 Read() 调用,直到数据可用(或使用现有的 Stream 实现),或者使用您自己的 MediaInput。
我在这里实现了这样的媒体输入:https://github.com/jeremyVignelles/libvlcsharp-nonfree-samples
您可以在 C# 中为 LibVLC 使用此代码:
MemoryStream stream = ...
mediaPlayer.Play(new Media(libVLC, new StreamMediaInput(stream)));