关闭

使用live555 VLC发送接收视频TS流

1017人阅读 评论(0) 收藏 举报
分类:

转载地址:

http://blog.csdn.net/persist_1/article/details/39227251


本文内容如下:

如何使用VLC作为Server发送视频TS流,

如何使用live555发送接收TS流

VLC发送TS流

VLC发送接收TS命令

通常可以使用下述四种方式

1. UDP
2. RTP
3. RTSP
4. HTTP
同时附带在加入转码后的实现方式

UDP方式

Server(10.22.76.56)配置

点击(此处)折叠或打开

  1. vlc test.ts --sout "#standard{mux=ts{pid-video=100,pid-audio=101,pid-pmt=98},access=udp,dst=10.22.76.103:3940}" --sout-all --sout-keep --loop
如此,我们就实现
1. 使用指定的pid(video,audio,pmt等的pid)
2. 往指定的Dst:Port(10.22.76.103:3940)
3. 推送指定的视频流 test.ts

在server推送这个视频流后,client(10.22.76.103)使用command:

点击(此处)折叠或打开

  1. vlc udp://@:3940
  2. 或者
  3. vlc udp://@10.22.76.103:3940
来进行视频的播放

以上的 server配置中,Server本地并不会播放视频,仅仅是推送TS,如果要实现在 Server本地播放,可以使用

点击(此处)折叠或打开

  1. vlc test.ts --sout "#duplicate{dst=display,dst=standard{mux=ts{pid-video=100,pid-audio=101,pid-pmt=98},access=udp,dst=172.22.102.56:3940}}" --sout-all --sout-keep --loop
从中对比可以看出,如果需要本地播放,只是在sout中多添加了几个option的配置而已
--sout "#duplicate{dst=display,dst=standard{mux=ts{pid-video=100,pid-audio=101,pid-pmt=98},access=udp,dst=172.22.102.56:3940}}"
其中,绿色表示单纯往Dst:port推送TS
蓝色表示如果要在本地播放,除去需要推送的dst外,还需要在本地display

如果Server推送的TS还有转码的需求,类似上述的扩展,可以使用

点击(此处)折叠或打开

  1. vlc test.ts --sout "#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128,deinterlace}:duplicate{dst=display,dst=standard{mux=ts{pid-video=100,pid-audio=101,pid-pmt=98},access=udp,dst=172.22.102.56:3940}}" --sout-all --sout-keep --loop
从中可以看出,对于转码的需求,也仅仅是添加了蓝色的一段options而已
--sout "#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128,deinterlace}:duplicate{dst=display,dst=standard{mux=ts{pid-video=100,pid-audio=101,pid-pmt=98},access=udp,dst=172.22.102.56:3940}}"

对于转码,有音频和视频不同类似的转码方式,组合后其方式会更多,具体的可以使用VLC的UI配置方式,在选择不同的转码方式后,来查看对应生成的command有何不同,在此仅仅列举其中的几种:
 Video - H.264 + MP3 (MP4)
 vcodec=h264,acodec=mpga,ab=128,channels=2,samplerate=44100

 Video - H.264 + MP3 (TS)
 vcodec=h264,vb=800,acodec=mpga,ab=128,channels=2,samplerate=44100

 Audio - MP3 (MP4)
 vcodec=none,acodec=mpga,ab=128,channels=2,samplerate=44100

 Video for MPEG4 1080p TV/device
 vcodec=h264,vb=3500,width=1920,height=1080,acodec=mp3,ab=192,channels=2,samplerate=44100

需要注意:
1. 使用转码后,从测试效果来看,通常会出现马赛克。是因为转码需要消耗一定的cpu资源导致?
2. 使用UDP等方式推送的TS,Client在接收时候需要" vlc udp://@:3940", "vlc udp://@10.22.76.103:3940" 中需要加上 "@"。在后续使用TCP的 RTSP和HTTP中,可以不用加上@

对于Client的接收方式,以上server不同的推送方式下,都是一样的


RTP方式

Server(10.22.76.56)配置

点击(此处)折叠或打开

  1. vlc test.ts --sout "#rtp{mux=ts{pid-video=100,pid-audio=101,pid-pmt=98},dst=172.22.102.55,port=3940}" --sout-all --sout-keep --loop
  2. vlc test.ts --sout "#rtp{mux=ts{pid-video=100,pid-audio=101,pid-pmt=98},access=udp,dst=172.22.102.55,port=3940}" --sout-all --sout-keep --loop
其中,Access方式设置与否都可以。

在server推送这个视频流后,client(10.22.76.103)使用command:

点击(此处)折叠或打开

  1. vlc rtp://@10.22.76.103:3940
  2. 或者
  3. vlc rtp://@:3940

对于需要在本地显示和需要使用转码的,可以采用:

点击(此处)折叠或打开

  1. vlc test.ts --sout "#duplicate{dst=display, dst=rtp{mux=ts{pid-video=100,pid-audio=101,pid-pmt=98},dst=10.22.76.55,port=3940}}" --sout-all --sout-keep --loop
  2. vlc test.ts --sout "#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128,deinterlace}:duplicate{dst=display, dst=rtp{mux=ts{pid-video=100,pid-audio=101,pid-pmt=98},dst=10.22.76.55,port=3940}}" --sout-all --sout-keep --loop
注意点:
1. 在使用rtp方式时候,dst=后面使用的是 rtp,而不在是默认udp的 standard
2. 其中对于Port的指定,不再像UDP或者其他方式一样,使用Ip:Port,而是使用"dst=Ip,port=port1"的方式

RTSP方式

Server(10.22.76.56)配置

点击(此处)折叠或打开

  1. vlc test.ts --sout "#rtp{sdp=rtsp://:8554/test1}"

在server推送这个视频流后,client(10.22.76.103)使用command:

点击(此处)折叠或打开

  1. vlc rtsp://10.22.76.56:8554/test1

对于RTSP或者以下的HTTP方式下,和上述UDP/RTP推送方式有些不同:
1. 使用UDP方式下,Server会将TS流推送到制定的 Client,因此,server和client应该是能互相通信的。所以Client只需要在本地从本地网卡接收TS就可以了,因此可以省略Ip
2. 使用Http方式下,Server是将TS流推送到本地的网卡上(严格来说数据还没有真实发送给网卡,只是在网卡的特定Port上侦听Client的连接),Client需要使用TCP来连接Server(使用制定的Ip和Port),在建立tcp连接后,server会将TS推送给Client。因此Server可以省略Ip,但是Client必须制定server的Ip和Port

对于需要在本地显示和转码的,可以参考:

点击(此处)折叠或打开

  1. vlc test.ts --sout "#duplicate{dst=display, dst=rtp{sdp=rtsp://:8554/test1}}"
  2. vlc test.ts --sout "#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128,deinterlace}:duplicate{dst=display, dst=rtp{sdp=rtsp://:8554/test1}}"

注意点:
1. 在这种模式下,Client的接收方式和之前的UDP方式不同。可以是"vlc rtsp://@IP" 或者是 "vlc rtsp://IP"的方式,@是可选的
2. Server在推送时候,会需要在Port后添加目录,比如上述的"/test1"。自然client在接收时候也需要指定
3. 如果Server在推送时候,省略了Ip的指定,则该Server上所有的Interface上,都能接收Client的请求

HTTP方式

Server(10.22.76.56)配置

点击(此处)折叠或打开

  1. vlc test.ts --sout "#standard{mux=ts{pid-video=100,pid-audio=101,pid-pmt=98},access=http,dst=10.22.76.56:3940}" --sout-all --sout-keep --loop

在server推送这个视频流后,client(10.22.76.103)使用command:

点击(此处)折叠或打开

  1. vlc http://10.22.76.56:3940

同样,对于有在本地显示和转码需求的,可以参考:

点击(此处)折叠或打开

  1. vlc test.ts --sout "#duplicate{dst=display,dst=standard{mux=ts{pid-video=100,pid-audio=101,pid-pmt=98},access=http,dst=10.22.76.56:3940}}" --sout-all --sout-keep --loop
  2. vlc test.ts --sout "#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128,deinterlace}:duplicate{dst=display,dst=standard{mux=ts{pid-video=100,pid-audio=101,pid-pmt=98},access=http,dst=10.22.76.56:3940}}" --sout-all --sout-keep --loop

-----------------------参考资料------------------------
使用vlc实现视频TS流的推送 

http://blog.chinaunix.net/uid-26527046-id-4409467.html

live555发送接收TS流

该部分内容有待更新
0
0
查看评论

live555中ts流详细解析

Ts流详细解析 该文档主要是对live555源码下testProgs中testMPEG2TransportStreamer服务器端的详细分析。主要分析ts流实现的总体调用流程。 testMPEG2TransportStreamer中主要涉及的类视图如下,其中这些类主要实现都在liveMedia库下,...
  • longbei9029
  • longbei9029
  • 2016-10-10 18:44
  • 969

修改live555支持mpeg2ts RTSP拉流,附代码

在很早之前的博客《用EasyDarwin进行IPTV rtsp mpeg-ts smil流的转发和分发直播服务》中,我们介绍到如何将live555支持mpeg2ts拉流,这个在IPTV领域用的特别多,其实修改的点也不是很多,主要是要对live555有一点的熟悉程度,这里就不多显摆啥了,直接上之前的说...
  • xiejiashu
  • xiejiashu
  • 2017-04-07 10:27
  • 3022

使用live555 VLC发送接收视频TS流

鉴于Mpeg TS流播放的需求,使用 VLC作为Server来实现输出Mpeg TS     本文仅涉及如何使用VLC的Command来实现作为视频流Server 通常可以使用下述四种方式来推送Mpeg TS 1. UDP 2. RTP 3. RTSP ...
  • persist_1
  • persist_1
  • 2014-09-12 11:03
  • 1657

使用VLC发送TS流与播放TS流

一、如何使用VLC发送TS流 1、添加一个文件至VLC 2、选择串流,继续 3、选择UDP,点击添加 4、输入地址及端口 5、选择h.264+mp3(TS) 6、next至播放。 二、如何播放TS流 打开新的VL...
  • liukang325
  • liukang325
  • 2015-02-05 16:05
  • 8725

TS通过UDP的方式传送给VLC(下面为服务端代码),客服端接收方式:udp://@:5678

/* Project by qiuliangbin copyright 2015-2018*/ /* Just for learning; */ /* Function:Use Rtp Transmition send Ts to VLC Media p...
  • nine_locks
  • nine_locks
  • 2015-08-10 16:32
  • 1538

TS流如何经过RTP封装及其vlc通过打开sdp文件的方式接收

头文件hTs.h: /* Project by qiuliangbin copyright 2015-2018*/ /* Just for learning; */ /* Function:Use Rtp Transmition send Ts to ...
  • nine_locks
  • nine_locks
  • 2015-08-10 16:42
  • 1741

vlc使用udp组播窜流发送ts流的特殊规则

当你写程序去接收vlc发送的ts流时,你会发现解析出来的一帧视频帧有时候解码会失败,追究其原因,是因为前4个字节不是0,0,0,1。 那为什么会这样呢? 这是因为vlc在处理大于65535字节的视频帧时,没有按照ISO标准来。 ISO标准的做法是将PES_packet_length置为0,如果要获取...
  • yuhengyue
  • yuhengyue
  • 2017-10-20 15:02
  • 190

live555实现TS码流RTSP传输

查阅网上各种资料,发现live555作为服务器实现h264码流的rtsp传输的例子很多,但关于live555实现ts流的rtsp传输的资料很少。由于项目需要,我的客户端只能实现rtsp的TS流解码,故只能自己摸索。   以下参考h264相关资料和自己理解进行编写,不当之处请理解。本工程以...
  • xiahua882
  • xiahua882
  • 2016-09-19 18:02
  • 1253

RTP发送音视频流vlc播放

vlc是可以同时播放多路流媒体的,我是同事播放了shipi
  • zhangjikuan
  • zhangjikuan
  • 2014-05-29 20:36
  • 2801

基于Live555的封装H264裸流为Ts流笔记(H264转ts流最简单方法)

H264转ts流最简单方法
  • luopeiyuan1990
  • luopeiyuan1990
  • 2015-04-08 13:49
  • 3401
    个人资料
    • 访问:315832次
    • 积分:4972
    • 等级:
    • 排名:第6763名
    • 原创:150篇
    • 转载:265篇
    • 译文:1篇
    • 评论:18条
    文章分类
    最新评论