Gstreamer 画中画 - 两个文件并行播放
Gstreamer picture-in-picture - two files playing in parallel
我需要为 "picture-in-picture" 效果构建管道以合并来自两个文件的媒体:
1) 第一个文件的视频内容显示完整 window
2) 第二个文件的视频被调整大小并显示在 window 的左上角,
3)来自两个文件的音频混合
4) 两个文件的内容应该同时播放
到目前为止,我得到了以下管道:
gst-launch-1.0 -e \
filesrc name="src0" location=$FILE0 \
! decodebin name="decodebin0" ! queue ! videoscale ! capsfilter caps="video/x-raw,width=120" ! videoconvert ! videomixer.sink_0 decodebin0. ! queue ! audioconvert ! audiomixer.sink_0 \
filesrc name="src1" location=$FILE1 \
! decodebin name="decodebin1" ! queue ! videoscale ! capsfilter caps="video/x-raw" ! videoconvert ! videomixer.sink_1 decodebin1. ! queue ! audioconvert ! audiomixer.sink_1 \
videomixer name="videomixer" ! autovideosink \
audiomixer name="audiomixer" ! autoaudiosink
但是,它会一个接一个地播放流,而不是并行播放。有谁知道应该在这里更改什么才能同时播放流?
Ps:附上可视化的管道图:
令人惊讶的是 - 管道中源的顺序确实很重要 - 在对管道进行轻微修改并将带有 "larger" 框架的源放在第一位之后,我能够得到预期的结果:
gst-launch-1.0 -ev \
filesrc name="src1" location=$FILE1 \
! decodebin name="decodebin1" ! queue ! videoscale ! capsfilter caps="video/x-raw,framerate=15/1" ! videoconvert ! videomixer.sink_1 decodebin1. ! queue ! audioconvert name="ac1" \
filesrc name="src0" location=$FILE0 \
! decodebin name="decodebin0" ! queue ! videoscale ! capsfilter caps="video/x-raw,width=120,framerate=15/1" ! videoconvert ! videomixer.sink_0 decodebin0. ! queue ! audioconvert name="ac0"\
ac0. ! audiomixer.sink_0 \
ac1. ! audiomixer.sink_1 \
videomixer name="videomixer" ! autovideosink \
audiomixer name="audiomixer" ! autoaudiosink \
我需要为 "picture-in-picture" 效果构建管道以合并来自两个文件的媒体:
1) 第一个文件的视频内容显示完整 window 2) 第二个文件的视频被调整大小并显示在 window 的左上角, 3)来自两个文件的音频混合 4) 两个文件的内容应该同时播放
到目前为止,我得到了以下管道:
gst-launch-1.0 -e \
filesrc name="src0" location=$FILE0 \
! decodebin name="decodebin0" ! queue ! videoscale ! capsfilter caps="video/x-raw,width=120" ! videoconvert ! videomixer.sink_0 decodebin0. ! queue ! audioconvert ! audiomixer.sink_0 \
filesrc name="src1" location=$FILE1 \
! decodebin name="decodebin1" ! queue ! videoscale ! capsfilter caps="video/x-raw" ! videoconvert ! videomixer.sink_1 decodebin1. ! queue ! audioconvert ! audiomixer.sink_1 \
videomixer name="videomixer" ! autovideosink \
audiomixer name="audiomixer" ! autoaudiosink
但是,它会一个接一个地播放流,而不是并行播放。有谁知道应该在这里更改什么才能同时播放流?
Ps:附上可视化的管道图:
令人惊讶的是 - 管道中源的顺序确实很重要 - 在对管道进行轻微修改并将带有 "larger" 框架的源放在第一位之后,我能够得到预期的结果:
gst-launch-1.0 -ev \
filesrc name="src1" location=$FILE1 \
! decodebin name="decodebin1" ! queue ! videoscale ! capsfilter caps="video/x-raw,framerate=15/1" ! videoconvert ! videomixer.sink_1 decodebin1. ! queue ! audioconvert name="ac1" \
filesrc name="src0" location=$FILE0 \
! decodebin name="decodebin0" ! queue ! videoscale ! capsfilter caps="video/x-raw,width=120,framerate=15/1" ! videoconvert ! videomixer.sink_0 decodebin0. ! queue ! audioconvert name="ac0"\
ac0. ! audiomixer.sink_0 \
ac1. ! audiomixer.sink_1 \
videomixer name="videomixer" ! autovideosink \
audiomixer name="audiomixer" ! autoaudiosink \