0

我在 odroid xu4 上安装了 C920 logitec usb 网络摄像头,并安装了 linux ubuntu。我想以 h264 格式录制最高质量的视频。

所以每秒 30 帧和 1920x1080 视频大小。同时发送流 h264 格式但质量较低。

我可以以相同的质量录制和流式传输,但质量不同。现在有没有人如何修复管道,以便我可以以较低的质量流式传输?工作(相同的分辨率):


gst-launch-1.0 v4l2src device=/dev/video0 ! tee name=t \
! queue  ! video/x-h264,framerate=30/1,width=1920,height=1080 ! h264parse ! mp4mux ! filesink location=/media/webcam.mp4 -v -e t. \
! queue ! h264parse ! rtph264pay ! udpsink host=113.141.0.1 port=4321

不工作:(发送尺寸 800x600):

gst-launch-1.0 v4l2src device=/dev/video0 ! tee name=t \
! queue  ! video/x-h264,framerate=30/1,width=1920,height=1080 ! h264parse ! mp4mux ! filesink location=/media/webcam.mp4 -v -e t. \
! queue ! video/x-h264,framerate=30/1,width=800,height=600 ! h264parse ! rtph264pay ! udpsink host=113.141.0.1 port=4321

这是我尝试不同分辨率时遇到的错误:



ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2865): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming task paused, reason not-negotiated (-4)
/GstPipeline:pipeline0/GstMP4Mux:mp4mux0.GstPad:src: caps = video/quicktime, variant=(string)iso
EOS on shutdown enabled -- waiting for EOS after Error
Waiting for EOS...
/GstPipeline:pipeline0/GstFileSink:filesink0.GstPad:sink: caps = video/quicktime, variant=(string)iso
ERROR: from element /GstPipeline:pipeline0/GstH264Parse:h264parse1: No valid frames found before end of stream
Additional debug info:
gstbaseparse.c(1153): gst_base_parse_sink_event_default (): /GstPipeline:pipeline0/GstH264Parse:h264parse1
ERROR: from element /GstPipeline:pipeline0/GstH264Parse:h264parse0: No valid frames found before end of stream
Additional debug info:
gstbaseparse.c(1153): gst_base_parse_sink_event_default (): /GstPipeline:pipeline0/GstH264Parse:h264parse0
4

1 回答 1

0

我找到了一个可能的解决方案,但这是一个非常繁重的操作(CPU 方面),因为我们首先需要解码来自网络摄像头的 H264 视频,更改分辨率并再次对其进行编码。

根据帧率、视频规模、编码速度和比特率,此操作可能会占用 odroid-xu4 上的多个内核。与完全不改变分辨率相比,在网络摄像头 (1920x1080 @30fps) 上的 H264 设置的最高分辨率和帧率下,一个内核的最大 20%。


gst-launch-1.0 v4l2src device=/dev/video0 ! tee name=t ! queue  ! video/x-h264,framerate=30/1,width=1920,height=1080 ! h264parse ! mp4mux ! filesink location=/root/temp/webcam.mp4 -v -e t. ! queue ! decodebin ! videoscale ! videorate ! video/x-raw,framerate=30/1,width=800,height=600 ! x264enc bitrate=500 speed-preset=superfast tune=zerolatency ! h264parse ! rtph264pay ! udpsink host=132.132.10.11 port=1234 -v

请注意,如果 x264enc 没有设置“tune=zerolatency”,则管道将卡住消息“重新分配延迟...”

有人知道类似的命令但 CPU 使用率较低吗?

于 2017-03-24T10:06:13.643 回答