转:http://elkpi.com/topics/vlc-stream-rtp-n-save-ps.html
VLC真是神器,在开发视频处理的时候,从其代码上学到了不少东西,其还提供N多的功能,可以进行开发中对流的调试。当时开发的时候,很经常使用,有些都忘记怎么搞了。那时候笔记记录也少。今天刚好要用到RTP流的保存,所以就先把这段记录一下。其实官网的wiki已经有很详细的配置了。
首先是发送RTP流。发送的话,其实可以直接使用GUI界面进行配置,也不是很难。但是命令更加的容易。命令就一条:
1
|
vlc -vvv 1.mp4 --sout '#rtp{dst=127.0.0.1,port=5004,ttl=1}'
|
上面这条命令,就是播放1.mp4的文件,rtp到127.0.0.1的5004端口,在终端,还可以看到对应的SDP信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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目录下的话。命令则为:
1
|
vlc -vvv 1.mp4 --sout '#rtp{dst=127.0.0.1,port=5004,ttl=1,sdp=file:///tmp/stream.sdp}'
|
需要注意的一点就是,使用命令输出的时候,当文件播放完了,stream.sdp文件也会跟着消息,所以最好是拷贝一份。
播放的话,其实VLC已经做得足够好了。没有保存流的话。只要执行
1
2
|
vlc stream1.sdp
vlc 1.mp4
|
这样就可以直接播放了。如果要保存流输出的话,需要的参数是这样的:
1
|
--sout file/muxer:stream.xyz
|
比如
1
|
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执行如下的命令:
1
|
vlc stream1.sdp --sout=file/ps:go.mpg
|
执行顺序要反一下,也就是先执行播放sdp文件,然后在执行rtp流的发送,这样的话,才能把所有的流都保存下来。