rtpdump 文件可以使用rtpplay
和转换为 mp4 FFmpeg
。
例如,让我们考虑这些文件:
分析它们:
$ rtpdump -Fascii -f narwhals-audio.rtpdump | head -n 1
0.000000 RTP len=15 from=0.0.0.0:0 v=2 p=0 x=0 cc=0 m=1 pt=97 (????,0,0) seq=1679 ts=249986024 ssrc=0xf944ac63
$ rtpdump -Fascii -f narwhals-audio.rtpdump | tail -n 1
65.570000 RTP len=15 from=0.0.0.0:0 v=2 p=0 x=0 cc=0 m=1 pt=97 (????,0,0) seq=4959 ts=253134824 ssrc=0xf944ac63
分析结果:
Audio sample rate = (253134824 - 249986024) / (65.57 - 0) ~= 48000
Audio codec: probably opus
Audio payload type: 97
Video sample rate: 90000
Video codec : probably VP8
Video payload type: 96
编解码器名称可能需要一些猜测/投资/只是尝试所有这些。
让我们为视频分配端口 4646,为音频分配端口 4848,并创建一些 SDP 文件:
v=0
c=IN IP4 127.0.0.1
m=video 4646 RTP/AVP 96
a=rtpmap:96 VP8/90000
m=audio 4848 RTP/AVP 97
a=rtpmap:97 opus/48000
然后让我们准备一个命令行来启动 FFmpeg,它将根据 SDP 监听这些端口并保存到 MP4 文件:
ffmpeg -v warning -protocol_whitelist file,udp,rtp -f sdp -i narwhals.sdp -copyts -c copy -y narwhals.mkv
FFmpeg 在 10 秒未能接收到任何数据包后退出,因此暂时不要启动该命令行。
然后,在另一个控制台选项卡中,准备 rtpplay 命令行:
rtpplay -T -f narwhals-video.rtpdump 127.0.0.1/4646 & rtpplay -T -f narwhals-audio.rtpdump 127.0.0.1/4848
也不要开始它。请注意,有两个rtpplay
s 应该同时启动。
现在,快速连续地启动准备好的 FFmpeg 命令行,然后是rtpplay
s. 等到 rtpplays 完成(大约一分钟)。然后 FFmpeg 应该超时并且您的文件已完成。
mkv 文件可以转成 MP4,但由于 MP4 不支持 VP8,所以需要转码。转码也可以用 FFmpeg 完成。
不幸的是,音频/视频同步可能是一个问题,也可以使用 FFmpeg 技巧来解决;或通过调整 SDP 中的采样率,例如VP8/95000
.