如何使用 libvlcsharp(c# 或 vb.net)播放数据流中的视频

问题描述 投票:0回答:2

我在 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)

问题在于缓冲区。它播放得很好,几秒钟后就停止播放。我该如何处理这个问题?

c# vb.net libvlc libvlcsharp
2个回答
1
投票

如此处所述:https://code.videolan.org/videolan/LibVLCSharp/-/issues/526#note_294698,MemoryStream 不会执行此操作,因为 libvlc 读取数据的速度比数据到达的速度快,并假设流是完成了。

您需要实现一个 Stream 来阻止 Read() 调用,直到数据可用(或使用现有的 Stream 实现),或者使用您自己的 MediaInput。

我在这里实现了这样的媒体输入:https://github.com/jeremyVignelles/libvlcsharp-nonfree-samples


0
投票

您可以在 C# 中为 LibVLC 使用此代码:

MemoryStream stream = ...
mediaPlayer.Play(new Media(libVLC, new StreamMediaInput(stream)));
© www.soinside.com 2019 - 2024. All rights reserved.