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
转载请注明: 转载自elkPi.com
本文链接地址: vlc发送RTP流并保存RTP流