2017-04-06 53 views
0

我用这个代码从一个MP4文件创建实时流:如何使低延迟且具有良好的品质为HLS即时串流

ffmpeg -re -i input.mp4 
-c:a aac -c:v libx264 -s uhd2160 -f hls -hls_list_size 0 2160p/out.m3u8 
-c:a aac -c:v libx264 -s 2560x1440 -f hls -hls_list_size 0 1440p/out.m3u8 
-c:a aac -c:v libx264 -s hd1080 -f hls -hls_list_size 0 1080p/out.m3u8 
-c:a aac -c:v libx264 -s hd720 -f hls -hls_list_size 0 720p/out.m3u8 
-c:a aac -c:v libx264 -s hd480 -f hls -hls_list_size 0 480p/out.m3u8 
-c:a aac -c:v libx264 -s nhd -f hls -hls_list_size 0 360p/out.m3u8 
-c:a aac -c:v libx264 -s cga -f hls -hls_list_size 0 200p/out.m3u8 

但流的时候,也有极延迟。
看起来,这个延迟存在于质量非常高的流式视频中,就像我用于livestream的视频(4k)一样。
我该如何减少这个延迟减少内存使用率为?

+0

用于实时方法的HLS不是一个好的解决方案。在我的测试中,每次至少延迟5秒。 – Hokusai

+0

@ Hokusai,你能告诉我你的建议吗? – parsa

+1

您可以通过使用[tee muxer](http://ffmpeg.org/ffmpeg-formats.html#tee)为所有输出对音频编码一次而不是单独编码相同的流倍。 – LordNeckbeard

回答

0

如何使低延迟且具有良好的品质为HLS即时串流

你不能。

HLS的本质是细分的...而且在这个细分市场也是相对较大的细分市场。你试图减少的越多,你的开销越大。即使如此,在7或8秒以下也是非常困难的。

您可以切换到面向低延迟的技术,例如WebRTC,但存在质量折衷。在低延迟的情况下,编解码器的优化方式使得他们更倾向于延迟质量...质量受到影响。我不知道你的“优质”是什么,但是你必须在你的应用程序中决定对你来说真正重要的东西。

没有提供低延迟,卓越质量,高兼容性和易扩展性的魔术视频技术。它根本不会那样工作。考虑一下,考虑一下对你真正重要的事情,为你的场景选择正确的权衡,并且如果你需要考虑正确技术的帮助,请提出一个新问题。