kel*_*lly 12 ffmpeg vlc video-streaming gstreamer html5-video
我正在寻找最快的方法来编码可在html5视频标签中查看的网络摄像头流.我正在使用Pandaboard:http://www.digikey.com/product-highlights/us/en/texas-instruments-pandaboard/686#tabs-2获取硬件.可以使用gstreamer,cvlc,ffmpeg.我将用它来驱动一个机器人,所以在视频流中需要最少的延迟.质量不一定很好,也不需要音频.此外,这仅适用于一个客户端,因此带宽不是问题.到目前为止最好的解决方案是使用带有mpjpeg的ffmpeg给我约1秒的延迟.还有什么更好的?
av5*_*501 24
我被问过这么多次,所以我会尝试回答这个问题,而不只是为了mjpeg.在系统中获得非常低的延迟需要一些系统工程工作以及对组件的理解.
我能想到的一些简单的顶级调整是:
确保编解码器配置为最低延迟.编解码器将具有(特别是嵌入式系统编解码器)低延迟配置.启用它.如果您使用的是H.264,那么它最有用.大多数人没有意识到,根据标准要求,H.264解码器需要在显示之前缓冲帧.对于Qcif,最高可达16,对于720p,最高可达5帧.在第一帧出局方面存在很多延迟.如果您不使用H.264仍然确保您没有启用B图片.这会增加第一张照片的延迟.
由于您使用的是mjpeg,我认为这不适用于您.
编码器也会有速率控制延迟.(称为init延迟或vbv buf大小).将其设置为可为您提供可接受质量的最小值.这也将减少延迟.可以将其视为编码器和解码器之间的比特流缓冲器.如果您使用的x264将是vbv缓冲区大小.
一些简单的其他配置:使用尽可能少的I图片(大的内部时段).我的图片很大,增加了通过网络发送的延迟.这在端到端延迟在1秒或更长的范围内的系统中可能不是很明显,但是当您设计需要100ms或更短的端到端延迟的系统时,这个和其他几个方面起作用.还要确保使用低延迟音频编解码器aac-lc(而不是heaac).
在你的情况下,为了达到较低的延迟,我建议远离mjpeg并使用至少mpeg4而不使用B图片(简单配置文件)或最好是H.264基线配置文件(x264提供zerolatency选项).您将获得更低延迟的简单原因是,您将获得较低的比特率后编码以发送数据,您可以进入全帧速率.如果您必须坚持使用mjpeg,那么在没有编解码器和系统使用开源组件的更多高级功能支持的情况下,您已经接近了.
另一方面是将内容传输到显示单元.如果你可以使用udp,与tcp相比,它会减少相当多的延迟,尽管根据网络条件,它有时会有损.你提到了html5视频.我很好奇你是如何对html5视频标签进行直播.
还有其他方面也可以调整,我会把它放在高级类别中,并要求系统工程师尝试各种各样的事情
操作系统中的网络缓冲是什么?出于性能原因,OS还会在发送数据之前对其进行缓冲.调整这个以在性能和速度之间取得良好的平衡.
您使用的是CR还是VBR编码?虽然CBR非常适合低抖动,但如果编解码器提供它,您也可以使用上限vbr.
您的解码器可以开始解码部分帧吗?因此,在将数据提供给解码器之前,您不必担心将数据成帧.只需尽快将数据推送到解码器.
你能做场编码吗?在获得第一张照片之前,将帧编码的时间减半.
只要片段可以立即通过网络发送,您是否可以使用回调进行切片编码?
在子100毫秒中,我使用了上述所有工作中的延迟系统.某些功能可能在开源组件中不可用,但如果您真的需要它并且热情,您可以继续实施它们.
编辑:我意识到你不能做很多以上的ipad流媒体解决方案,并且因为hls也有限制你可以实现的延迟.但我希望在您需要任何低延迟系统时,它将在其他情况下证明是有用的.