我使用Directshow处理UDP / RTP多程序传输流。 我希望在单个图形中解码不同程序带来的音频通道。 如何配置解复用器以实现此目的?
使用GraphEdit,基本图形由:
组成网络接收器---> MS解复用器---> PSI解析器
允许我查看与每个节目相关的节目列表和音频/视频频道。 如果我在PSI解析器属性中选择程序,音频和视频PID,则会呈现内容。 现在,如何在同一个图表中同时渲染来自不同程序的多个频道?
我试过了:
1)通过PSI解析器属性对话框。第一个配置正常,但是当我配置第二个音频/视频/程序时,旧的内容呈现将被新配置替换。使用此方法通过API构建图形会产生相同的结果:只有第一个配置有效。如果我添加其他引脚,只有在配置与第一个引脚相同时才能呈现内容。如果音频/视频PID属于不同的程序,则不会呈现它。
2)级联两个(或更多)Demux,配置第一个转发属于特定程序的数据包,第二个从收到的流中提取音频和视频。对于此配置,输出引脚媒体类型="传输流",映射到"传输数据包(完整)&#34 ;; PID是由PSI解析器识别的程序PID。 结果:图表运行,但我有一个黑色的窗口,没有音频。
请帮忙吗?
答案 0 :(得分:0)
如何在demux之后添加tee过滤器,然后将多个解析器添加到tee的输出引脚?我认为这可能有用。
答案 1 :(得分:0)
我现在的方式是使用ffmpeg并生成多个输出。然后使用单独的FFmpeg实例分别编码这些流。唯一可能的问题是我使用Linux,这可能不适合其他操作系统。
这是主FFmpeg命令:
/usr/bin/ffmpeg -f mpegts -i "udp://@server_ip:8080?overrun_nonfatal=1&reuse=1" \
-map 0:p:1 -copyinkf -vcodec copy -acodec copy -f mpegts "udp://server_ip:8001" \
-map 0:p:2 -copyinkf -vcodec copy -acodec copy -f mpegts "udp://server_ip:8002" \
...
-map 0:p:10 -copyinkf -vcodec copy -acodec copy -f mpegts "udp://server_ip:8010"
然后你可以让单个FFmpeg实例运行如下:
/usr/bin/ffmpeg -i "udp://@server_ip:8001" -vcodec libx264 -acodec libmp3lame -f mpegts rtmp://other_server:port
希望这有助于让某人朝着正确的方向前进。我希望在我需要帮助时能够解释这一点。