如何播放GStreamer录制的H264文件并恢复不可用的录制流
问题根源
你录制时的GStreamer管道犯了一个关键错误:加了avdec_h264解码步骤。这个元件会把H264编码的视频流解码成原始YUV像素数据,最后filesink保存的不是H264编码文件,而是未压缩的原始视频数据,自然无法用普通的H264播放器打开。
正确的录制命令
去掉解码相关的avdec_h264和videoconvert,直接保存H264的编码流:
gst-launch-1.0 -e -v udpsrc address=230.1.1.1 port=1720 multicast-iface=eth0 ! application/x-rtp, media=video, encoding-name=H264 ! rtph264depay ! h264parse ! filesink location=test_correct.h264
这个命令生成的标准H264文件,用VLC、ffplay或你原来的GStreamer播放命令都能正常打开。
播放已录制的错误文件
现有test.h264是原始YUV数据,播放时必须指定视频的分辨率、像素格式(要和原UDP流一致):
- 用ffplay播放(假设原流是1920x1080、YUV420P格式):
ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080 test.h264
- 用GStreamer播放:
gst-launch-1.0 filesrc location=test.h264 ! videoparse format=I420 width=1920 height=1080 ! videoconvert ! autovideosink
如果不知道原流的分辨率和格式,可以先在录制前(用正确命令)加videoconvert ! autovideosink预览,同时查看GStreamer的日志输出,里面会包含视频的分辨率、格式信息。
内容的提问来源于stack exchange,提问作者khan
相关产品推荐
相关产品推荐

