使用ffmpeg从运行Linux的Pocketbeagle通过UDP实时直播网络摄像头视频,缺少了什么?

问题描述

我一直在阅读有关ffmpeg以及从网络摄像头流式传输实时提要的许多问题,并且已经非常接近了,但是我只是缺少一些小东西。我有一台运行Debian的Pocketbeagle(口袋大小的linux计算机),并通过USB连接了网络摄像头。 Pocketbeagle通过USB通过以太网连接到我的Windows计算机。 Pocketbeagle的IP为192.168.7.2,我的计算机为192.168.7.1。我正在尝试通过UDP流传输到VLC,但是无论我如何尝试,我都看不到VLC上的视频供稿

我正在运行的命令是这样:

ffmpeg -f v4l2 -input_format mjpeg -i /dev/video0 -framerate 10 -video_size 1280x720 -f mpegts udp:192.168.7.1:15151

这将导致输出,随着Lsize和时间的增加,直到我杀死它为止,它似乎实际上正在传输某些内容

ffmpeg version 4.1.6-1~deb10u1 copyright (c) 2000-2020 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --prefix=/usr --extra-version='1~deb10u1' --toolchain=hardened --libdir=/usr/lib/arm- 
linux-gnueabihf --incdir=/usr/include/arm-linux-gnueabihf --arch=arm --enable-gpl --disable-stripping 
--enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa -- 
enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio - 
-enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi - 
-enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable- 
libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable- 
librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh 
 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx -- 
enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq 
 --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable- 
libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 
 --enable-shared
   libavutil      56. 22.100 / 56. 22.100
   libavcodec     58. 35.100 / 58. 35.100
   libavformat    58. 20.100 / 58. 20.100
   libavdevice    58.  5.100 / 58.  5.100
   libavfilter     7. 40.101 /  7. 40.101
   libavresample   4.  0.  0 /  4.  0.  0
   libswscale      5.  3.100 /  5.  3.100
   libswresample   3.  3.100 /  3.  3.100
   libpostproc    55.  3.100 / 55.  3.100
 Input #0,video4linux2,v4l2,from '/dev/video0':
   Duration: N/A,start: 2998.098197,bitrate: N/A
     Stream #0:0: Video: mjpeg,yuvj422p(pc,bt470bg/unkNown/unkNown),1280x720,30 fps,30 tbr,1000k tbn,1000k tbc
 Stream mapping:
   Stream #0:0 -> #0:0 (mjpeg (native) -> mpeg2video (native))
 Press [q] to stop,[?] for help
 [swscaler @ 0x1bb2d40] deprecated pixel format used,make sure you did set range correctly
 Output #0,mpegts,to 'udp:192.168.7.1:15151':
   Metadata:
     encoder         : Lavf58.20.100
     Stream #0:0: Video: mpeg2video (4:2:2),yuv422p,q=2-31,200 kb/s,90k tbn,30 
 tbc
     Metadata:
       encoder         : Lavc58.35.100 mpeg2video
     Side data:
       cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
 frame=   17 fps=2.8 q=31.0 Lsize=     654kB time=00:00:02.10 bitrate=2552.5kbits/s speed=0.343x    x
 video:605kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 8.214545%
 Exiting normally,received signal 2.

最重要的是,VLC识别出某种流已经开始,并且非常缓慢地增加了时间(例如每30s-1m 1秒)。但是,我看不到任何视频。

在此运行方面的任何帮助将不胜感激!

解决方法

经过大量实验,我得到了一个使用ffmpeg的实时流,但是处理器性能不足以处理它,并且即使以144p的速度,视频输入也可以以.25倍的速度输出。如果有人感兴趣,这是我使用的命令:

ffmpeg -f v4l2 -input_format mjpeg -i / dev / video0 -r 10 -b:v 2000k -s 256x144 -c:v libx264 -f mpegts -flush_packets 0 udp://192.168.7.1:11795?pkt_size = 1024