rtpdump文件可以使用rtpplay
和FFmpeg
轉換爲mp4。
例如,讓我們考慮這些文件:
對其進行分析:
$ 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
Analyis結果:
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
應該同時啓動。
現在,快速連續地啓動準備好的FFmpeg命令行,然後啓動rtpplay
s。等到rtpplays完成(大約一分鐘)。 FFmpeg應該超時並完成文件。
mkv文件可能會轉換爲MP4,但它需要轉碼,因爲MP4不支持VP8。代碼轉換也可以用FFmpeg完成。不幸的是,音頻/視頻同步可能是一個問題,也可能使用FFmpeg技巧來解決;或通過調整SDP中的採樣率,如VP8/95000
。