我正在尝试使用gst-launch
来捕获视频,流式传输并将其保存在第二块板上。然后我想通过在PC上播放视频文件来验证流是否良好。
CAM8200-U -> RIoT_1------Stream_Ethernet-----RIoT_2 - Save file on RIoT_2.
两个板都在运行Linux Yocto v3.10.17
首先,我遵循了本教程(我使用的是gst-launch-0.10
而不是1.0
,因为这是板上的版本):http://www.z25.org/static/rd/videostreaming_intro_plab/
寄件人:
gst-launch-0.10 videotestsrc ! jpegenc ! rtpjpegpay ! udpsink host=127.0.0.1 port=5200
接收器:
gst-launch-0.10 udpsrc port=5200 ! application/x-rtp, encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! autovideosink
这个例子在板上完美运行!没有真正使用相机,但仍然是一个很好的起点。但是,如果我用filesink location=xxx.format (.mp4 .mkv .avi)
更改autovideosink
,则文件将无法播放。
问题1:您知道如何将此流保存在以后可以播放的文件中吗?
搜索了一会儿后,我能够使用以下行流式传输和保存videotestsrc
:
寄件人:
gst-launch-0.10 videotestsrc ! ffmpegcolorspace ! jpegenc ! udpsink host=192.168.1.103 port=5200
接收器:
gst-launch-0.10 udpsrc port=5200 ! jpegdec ! ffmpegcolorspace ! avimux ! filesink location=/home/root/movie.avi
但是,使用 v4l2src device=/dev/video0
更改videotestsrc
会给我一个空文件。
问题2:您知道为什么它可以与videotestsrc
一起使用而不是与相机一起使用吗?
然后我在YouTube上找到了element14给出的这个例子:https://www.youtube.com/watch?v=mRbckLppmKs 我可以从相机获取视频并保存它。这是一行:
gst-launch-0.10 v4l2src device=/dev/video0 num-buffers=-1 ! 'video/x-raw-yuv,width=1024,height=768' ! queue ! ffmpegcolorspace ! vpuenc codec=0 ! matroskamux ! filesink location=output.mkv sync=false
我已经尝试了多种方法来计算这条线以将其流式传输并将其保存在另一端,但它们都没有成功。
问题3:您知道从此相机流式传输和保存视频的正确方法吗?
要使用 v4l2src 捕获相机,您必须为其提供正确的设备。
您可能在这里使用了错误的设备。CAM8200-U 是一个 USB 摄像头,所以它不太可能是/dev/video0
对于 USB 相机,了解其设备的最简单方法是拔下并重新插入。新出现的(通常是最后一个)视频设备是相机的设备。假设设备是/dev/video10,您命令录制文件是
GST-launch-0.10 v4l2src device=/dev/video10 num-buffers=-1 !'视频/X-原始-yuv,宽度=1024,高度=768'!队列!ffmpeg彩色空间!vpuenc 编解码器 =0 !马特罗斯卡穆克斯!文件墨水位置=输出.mkv
(记得查看相机手册,确认是否支持分辨率1024x768)
发送流的命令是
gst-launch-0.10 v4l2src device=/dev/video10 num-buffers=-1 ! 'video/x-raw-yuv,width=1024,height=768' ! queue ! ffmpegcolorspace ! jpegenc ! udpsink host=192.168.1.103 port=5200
回答我的问题并回复玛蒂尔达:
谢谢,玛蒂尔达!实际上,由于某种原因,它总是在video0上。我的主要问题是让流工作,或者非常详细地如何加密/解密/使用正确的大写字母,所以它可以工作。
我能够使用以下选项从 RIoT 流式传输和保存到 RIoT:
寄件人:
gst-launch-0.10 v4l2src device=/dev/video0 ! 'video/x-raw-yuv,width=1024,height=768' ! ffmpegcolorspace ! vpuenc codec=5 ! rtph263pay ! udpsink host=192.168.1.104 port=5200
接收器:
gst-launch-0.10 udpsrc port=5200 ! application/x-rtp, media=video, payload=96 ! rtph263depay ! vpudec ! matroskamux ! filesink location=video3.mkv
很奇怪的是,如果我使用 avimux
而不是matroskamux
视频会以 5 倍的速度播放。不知道为什么,但在这一点上并不重要。此外,这些选项不适用于从 RIoTboard 到 PC,只是因为 Ubuntu 中没有vpudec
选项(或者至少不知道如何添加它)。也许使用不同的方法来解密H.263会起作用。
无论如何,感谢您的帮助!