vlc发送RTP流并保存RTP流

VLC真是神器,在开发视频处理的时候,从其代码上学到了不少东西,其还提供N多的功能,可以进行开发中对流的调试。当时开发的时候,很经常使用,有些都忘记怎么搞了。那时候笔记记录也少。今天刚好要用到RTP流的保存,所以就先把这段记录一下。其实官网的wiki已经有很详细的配置了。

首先是发送RTP流。发送的话,其实可以直接使用GUI界面进行配置,也不是很难。但是命令更加的容易。命令就一条:

vlc -vvv 1.mp4 --sout '#rtp{dst=127.0.0.1,port=5004,ttl=1}'

上面这条命令,就是播放1.mp4的文件,rtp到127.0.0.1的5004端口,在终端,还可以看到对应的SDP信息。

v=0
o=- 15518601131433376233 15518601131433376233 IN IP4 GE60-Kubuntu
s=Unnamed
i=N/A
c=IN IP4 127.0.0.1
t=0 0
a=tool:vlc 2.1.4
a=recvonly
a=type:broadcast
a=charset:UTF-8
m=video 5004 RTP/AVP 96
b=RR:0
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=64001f;sprop-parameter-sets=Z2QAH6zZQFAEX5sBEAAAPpAAC7gI8YMZYA==,aOvjyyLA;
m=audio 5006 RTP/AVP 14
b=AS:128
b=RR:0
a=rtpmap:14 MPA/90000/2

此次播放RTP的话,是基于SDP进行播放的,所以你需要把该SDP的信息保存下来。可以直接拷贝,VLC也支持将SDP进行输出。比如我上面的命令,如果要将SDP输出到/tmp目录下的话。命令则为:

vlc -vvv 1.mp4 --sout '#rtp{dst=127.0.0.1,port=5004,ttl=1,sdp=file:///tmp/stream.sdp}'

需要注意的一点就是,使用命令输出的时候,当文件播放完了,stream.sdp文件也会跟着消息,所以最好是拷贝一份。

播放的话,其实VLC已经做得足够好了。没有保存流的话。只要执行

vlc stream1.sdp
vlc 1.mp4

这样就可以直接播放了。如果要保存流输出的话,需要的参数是这样的:

--sout file/muxer:stream.xyz

比如

vlc your_input_file_or_stream_here --sout=file/ps:go.mpg

其中,muxer支持3种格式,分别是ogg,ps,ts格式。ogg是音频格式,ps也就是MPEG2-PS,而ts则是MPEG2-TS。我保存成本地的文件,使用smplayer播放的话,保存成TS格式会变快,但是VLC播放不会,ps格式的话,则相对较好。由于需要视频,所以就不考虑ogg格式了。一般播放器都支持ts,ps格式。综上,以ps格式为主。

所以如果我需要播放上面的流并保存,就用VLC执行如下的命令:

vlc stream1.sdp --sout=file/ps:go.mpg

执行顺序要反一下,也就是先执行播放sdp文件,然后在执行rtp流的发送,这样的话,才能把所有的流都保存下来。

 

参考资料:

Streaming HowTo/Receive and Save a Stream

Streaming HowTo/Advanced streaming with samples, multiple files streaming, using multicast in streaming

转载请注明: 转载自elkPi.com

本文链接地址: vlc发送RTP流并保存RTP流

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Scroll to top