1

在 C# 应用程序中,我通过 NuGet 包使用 LibVLC。

我创建了一个 MemoryStream 并将其提供给 Media:

MemoryStream buffer = new MemoryStream();
bool playing = false;

public void dataArrived(byte[] d) {
  buffer.Write(d, 0, d.Length);
  if (!playing) {
    playing = true;
    mediaPlayer.Play(new Media(LibVLC, buffer));
  }
}

NowdataArrived当数据从网络到达时被调用(这是一个实时流)。数据是有效的 mp4 流(分段,在 HTML5 视频中播放良好)。

但是 VLC 没有显示它。在日志中,我看到很多关于预取的消息:

prefetch stream debug: end of stream

VLC 可以读取和转储这些框,但是有一条消息(调试,而不是错误!)可能很有趣:

mp4 demux debug: unrecognized major media specification (iso5).

然后还有另一批有趣的消息:

mp4 demux warning: cannot select track[Id 0x1]
main input debug: EOF reached
main decoder debug: killing decoder fourcc `h264'
main decoder debug: removing module "avcodec"
main demux debug: removing module "mp4"
mp4 demux debug: freeing all memory
main input debug: Program doesn't contain anymore ES

LibVLC 是否有一些技巧(配置)可以即时播放碎片化的 mp4(数据无法提前获得)?

或者也许MemoryStream是为此目的的错误选择?

4

1 回答 1

1

MemoryStream 不太适合实时流,因为它表示流的结束,因为它不知道稍后会添加新数据。

使用您自己的实现Stream或创建您自己的MediaInput.

请注意,您似乎使用的是旧版本的 LibVLCSharp。较新的 API 不直接使用 Stream,但需要 MediaInput 才能工作。

如果你设法让它工作,你想在 LibVLCSharp 提交一个直播样本吗?这是我们被问到的一个功能。

于 2020-04-10T17:47:30.533 回答