ffmpeg自适应压缩

Paunescuionica

我目前正在开发一个应用程序,该应用程序将能够在HTML5视频元素中的浏览器中可视化来自不同来源(主要是IP摄像机)的图像。用户界面将允许矩阵视图,因此通常将同时显示16个或更多摄像机。从相机中,我获得了MJPEG流或JPEG图像(我将其“转换”为MJPEG流)。因此,对于相机来说,我有一个MJPEG流,我将其设置为ffmpeg的输入。我指示ffmpeg将其转换为MP4和H.264,并将输出显示为tcp流,如下所示:

ffmpeg -f mjpeg -i“ http://localhost/video.mjpg ” -f mp4 -vcodec libx264“ tcp://127.0.0.1:5001?listen”

这在localhost上工作得很好,我得到的流以最佳质量显示在网页上。

但这必须在各种网络条件下都有效。我对chrome节流设置进行了一些测试,并注意到,如果网络速度仅比要求的速度低一点(由ffmpeg中使用的当前压缩设置提供),那么事情就开始出错:从流开始被延迟(因此,不再是实时流),直到在浏览器中完全冻结“实时”图像为止。

我需要的是一种与当前网络速度相关的“自适应”压缩方式。

我的问题是:

  • ffmpeg能够处理此问题,以适应网络条件-在速度较低时自动降低压缩质量;因此浏览器中的图片质量会较低,但会实时显示(在我的情况下这是最重要的)

  • 如果没有,是否有解决方法?

  • 有没有办法检测网络瓶颈?(然后以较低的压缩参数重新启动ffmpeg;这不是动态自适应流,但总比没有好)

先感谢您!

西布朗·多坎波

您的解决方案无法在本地网络上运行。为什么?因为您必须使用HTTP。为此,最好的解决方案是使用HLS或DASH。

HLS

ffmpeg -i input.mp4 -s 640x360 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls index.m3u8

要生成自适应流,您必须创建一个二级索引。我不会在这里解释,因为在苹果产品扩展方面确实很清楚:https : //developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/Introduction/Introduction.html#//apple_ref/doc/uid/ TP40008332-CH1-SW1

并在标准中:https : //tools.ietf.org/html/draft-pantos-http-live-streaming-18

短跑

目前,FFMPEG不支持Dash编码。您可以使用FFMPEG([ https://www.ffmpeg.org/ffmpeg-formats.html#segment_002c-stream_005fsegment_002c-ssegment] [1 ]进行分段,但是我建议结合使用FFMPEG和MP4Box。FFMPEG可以对现场视频进行转码,而MP4Box可以进行分段并创建索引.mpd。

MP4Box是GPAC的一部分([ http://gpac.wp.mines-telecom.fr/][2]

例如(使用h264)-如果需要vp8(webm,请使用-vcodec libvpx和-f webm或-f ts):

ffmpeg -threads 4 -f v4l2 -i  /dev/video0 -acodec libfaac -ar 44100 -ab 128k -ac 2 -vcodec libx264 -r 30 -s 1280x720  -f mp4 -y "$movie" > temp1.mp4 && MP4Box -dash 10000 -frag 1000 -rap "$movie" 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章