我正在尝试使用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
这个例子在黑板上非常有效!不是真的用相机,但还是一个很好的起点。但是,如果我用autovideosink
更改filesink location=xxx.format (.mp4 .mkv .avi)
,则文件不可播放。
问题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
但是,用videotestsrc
更改v4l2src device=/dev/video0
将得到一个空文件。
问题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设备=/dev/video10 num缓冲区=-1!'视频/x-raw-yuv,宽度=1024,高度=768'!排队!快跑颜色空间!vpuenc编解码器=0!玛特罗斯卡缪!文件链接位置=output.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
关于linux - 两个带有CAM8200-U的RIoT板之间的UDP Gstreamer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35582807/