如何在 raspberry pi 上使用 "avconv" 来多播 h264 文件或 /dev/video0?
How to use "avconv" on raspberry pi for multicasting h264 file or /dev/video0?
我编写了一个简单的 opencv 桌面应用程序来接收来自 raspberry 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
如果您想将 /dev/video0 与 avconv 一起使用,您必须告诉 avconv 源是 video4linux2 source/stream。
为了获得好的结果,您必须告诉 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
我编写了一个简单的 opencv 桌面应用程序来接收来自 raspberry 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
如果您想将 /dev/video0 与 avconv 一起使用,您必须告诉 avconv 源是 video4linux2 source/stream。
为了获得好的结果,您必须告诉 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