在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));
}
}
现在dataArrived
从网络到达数据时被调用(这是实时流)。数据是有效的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
可能是错误的选择?
MemoryStream不是实时流的理想选择,因为它表示流的结尾,因为它不知道以后会添加新数据。
使用您自己的Stream
实现或创建自己的MediaInput
。
[注意,您似乎使用的是LibVLCSharp的旧版本。较新的API并不直接使用Stream,而是需要MediaInput才能工作。
如果您设法使其正常工作,您想在LibVLCSharp上提交实时流示例吗?我们需要此功能。