ffmpeg – 如何将RTPDUMP视频文件转换为mp4

Viber最近获得了“即时视频消息”选项,也称为“视频按键通话”(vptt).

目录“.vptt”中的viber数据内部有vptt扩展名的文件.信封格式是经典的ZIP文件,提取时会提供jpg-thumbnail和’video’文件.

视频文件在第一行内写着“#!rtpplay1.0”,所以它应该是rtp-tools的格式,也是wireshark使用的,并且以某种方式与实际的WebRTC趋势相关…

因此,如果此rtpdump文件中的视频内容未加密(?),“如何保存viber即时消息按键通话视频”归结为:“如何将rtpdump视频转换为mp4”.

rtpplay可以将它发送到某个端口,但ffmpeg / ffplay / vlc需要正确的sdp文件.

有人知道进一步的事情吗?

最佳答案 rtpdump文件可以使用rtpplay和FFmpeg转换为mp4.

例如,让我们考虑这些文件:

> narwhals-audio.rtpdump
> narwhals-video.rtpdump

分析他们:

$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.

现在,快速连续,启动准备好的FFmpeg命令行,然后启动rtpplays.等到rtpplays结束(大约一分钟).然后FFmpeg应该超时并且你的文件已经完成.

mkv文件可能会转换为MP4,但由于MP4不支持VP8,因此需要转码.转码也可以用FFmpeg完成.

不幸的是,音频/视频同步可能是一个问题,也可以使用FFmpeg技巧解决;或者通过调整SDP中的采样率,如VP8 / 95000.

点赞