如何使用" avconv"在树莓派的多播h264文件或/ dev / video0?

时间:2016-06-03 19:38:40

标签: raspberry-pi multicast avconv

我写了一个简单的opencv桌面应用程序来接收来自我的覆盆子pi的多播流。 在pi上我想使用avconv发送多播。

这个适用于我的应用程序以及VLC-Player:

avconv -i video.mp4 -f mpegts udp://225.0.0.37:4030

但是这个不起作用:

avconv -i video.h264 -f mpegts udp://225.0.0.37:4030

错误消息如下:

avconv version 9.18-6:9.18-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
  built on Mar 16 2015 13:20:58 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
[h264 @ 0x8986980] Estimating duration from bitrate, this may be inaccurate
Input #0, h264, from 'video.h264':
  Duration: N/A, bitrate: N/A
    Stream #0.0: Video: h264 (High), yuv420p, 320x240, 25 fps, 25 tbr, 25 tbn
Output #0, mpegts, to 'udp://225.0.0.37:4030':
  Metadata:
    encoder         : Lavf54.20.4
    Stream #0.0: Video: mpeg2video, yuv420p, 320x240, q=2-31, 200 kb/s, 90k tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> mpeg2video)
Press ctrl-c to stop encoding
[fps @ 0x8a5cac0] Discarding initial frame(s) with no timestamp.
    Last message repeated 445 times
frame=    0 fps=  0 q=0.0 Lsize=       0kB time=10000000000.00 bitrate=   0.0kbits/s    
video:0kB audio:0kB global headers:0kB muxing overhead -nan%

有人可以解释问题所在以及如何解决这个问题吗?

我的目标是使用v4l2驱动程序获取实时流,如下所示:

avconv -i /dev/video0 -f mpegts udp://225.0.0.37:4030

1 个答案:

答案 0 :(得分:3)

如果你想在avconv中使用/ dev / video0,你必须告诉avconv源是video4linux2源/流。

为了获得好的结果,你必须告诉v4l2将分辨率设置为ex .. 640x480否则它使用320x240

avconv -f video4linux2 -s 640x480 -i /dev/video0 -f mpegts udp://225.0.0.37:4030

但请记住,我认为你必须为此购买mpeg2许可证。

如果使用--enable-omx-rpi重新编译avconv,则可以使用Openmax中的硬件h264编码器。

avconv -f video4linux2 -s 640x480 -i /dev/video0 -f mp4 -na \
-c:v h264_omx -b:v 750k udp://225.0.0.37:4030

-na =禁用音频

这会将你的pi的CPU使用率降低70%或更多。

编译说明: https://ubuntu-mate.community/t/hardware-h264-video-encoding-with-libav-openmax-il/4997/6