鉴于Mpeg TS流播放的需求,使用 VLC作为Server来实现输出Mpeg TS    本文仅涉及如何使用VLC的Command来实现作为视频流Server
通常可以使用下述四种方式来推送Mpeg 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流 使用VLC搭建简单媒体流服务器 IPTV支持TS流方案

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

使用vlc实现视频TS流的推送的更多相关文章

  1. 使用Power BI API 向流数据集推送实时数据并在仪表板可视化

    使用Power BI 实现实时数据的可视化是大家比较关心的一个话题,在仪表盘上实现推送数据的展示,可以在诸如指挥大屏等场景下使用. 本视频实战内容如下: https://v.qq.com/x/page ...

  2. 手机Android音视频采集与直播推送,实现单兵、移动监控类应用

    从安卓智能手机.平板,到可穿戴的Android Ware.眼镜.手表.再到Android汽车.智能家居.电视,甚至最近看新闻,日本出的几款机器人都是Android系统的,再把目光放回监控行业,传统监控 ...

  3. TS流基本概念

    在MPEG-2标准中,有两种不同类型的码流输出到信道:一种是节目码流(Program Stream, PS),适用于没有误差产生的媒体存储,如DVD等存储介质:另一种是传送流(Transport st ...

  4. C# 实现IP视频监控(摄像头)画面推送(简单的不能再简单的DEMO)

    最近继续在家休息,在完成上一个Python抓取某音乐网站爬虫后,琢磨着实现一个基于HTTP推送的 IP视频监控,比如外出的时候,在家里 开启一个监控端(摄像头+服务端),可以看到实时画面,如果再加上自 ...

  5. nginx-rtmp之直播视频流的推送

    一.RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写.该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变 ...

  6. C#调用EasyPusher推送到EasyDarwin实现视频流中转

    本文转自:http://www.cnblogs.com/kangkey/p/6772863.html 最近在公司项目中,遇到需要将内网的监控视频信息,在外网进行查看,最终通过查阅资料,发现EasyDa ...

  7. 基于libRTMP的流媒体直播之 AAC、H264 推送

    这段时间在捣腾基于 RTMP 协议的流媒体直播框架,其间参考了众多博主的文章,剩下一些细节问题自行琢磨也算摸索出个门道,现将自己认为比较恼人的 AAC 音频帧的推送和解析.H264 码流的推送和解析以 ...

  8. 【基于libRTMP的流媒体直播之 AAC、H264 推送】

    这段时间在捣腾基于 RTMP 协议的流媒体直播框架,其间参考了众多博主的文章,剩下一些细节问题自行琢磨也算摸索出个门道,现将自己认为比较恼人的 AAC 音频帧的推送和解析.H264 码流的推送和解析以 ...

  9. windows ffmpeg 推送摄像头数据到rtmp服务

    文本主要讲述windows系统下如何利用ffmpeg获取摄像机流并推送到rtmp服务,命令的用法前文 中有讲到过,这次是通过代码来实现.实现该项功能的基本流程如下: 图1 ffmpeg推流流程图 较前 ...

随机推荐

  1. ES6学习笔记十:模块的导入、导出

    一:模块导入 1) import { 要导入的属性.方法民 } from '模块路径'; 2)该种方法需要有配置文件,指明模块所在路径 import { 要导入的属性.方法民 } from '模块名' ...

  2. cocos2d-js Shader系列3:多重纹理 multiple textures multiple samplers

    上一篇,我们学习了怎么便捷的控制sprite的颜色,而这个都是默认一个texture的,如果要实现类似mask的效果,或者更个性化的多纹理效果,怎么实现呢? 这就是这一节需要介绍的内容. 例如上图的效 ...

  3. windows能连网络,可是打不开网页,出现无法解析server的DNS

    首先,我想先说作为一名刚学完计算机网络课的学生,并且还完毕了学校的号称和斯坦福一个难度级别的网络实验之后.我觉得自己对于计算机网络还是勉强入门了.对于各种之前仅仅是听过的各种tcp.http.路由器. ...

  4. Android如何设置TextView的行间距、行高。

         Android系统中TextView默认行间距比较窄,不美观.     我们可以设置每行的行间距,可以通过属性android:lineSpacingExtra或android:lineSpa ...

  5. Android拦截外拨电话

    拦截监听外拨的电话,并进行处理: 向外拨打电话时系统会发出一个有序广播,虽然该广播最终会被拔号器里的广播接收者所接收并实现电话拔打,但我们可以在广播传递给拔号广播接收者之前先得到该广播,然后清除传递给 ...

  6. ASP.NET 动态查找数据 并且生成xml文档 同时使用xslt转换为xhtml

    前言 xsl是一门标签解析语言,很适合做动态网页的前台标签 www.bamn.cn 1 首先是aspx页面 添加一个输入框 按钮 还有一个用来显示解析后的xhtml代码的控件 <form id= ...

  7. Maven实战——Gradle,构建工具的未来?

    许晓斌-- 四月 05, 2011 Maven面临的挑战 软件行业新旧交替的速度之快往往令人咂舌,不用多少时间,你就会发现曾经大红大紫的技术已经成为了昨日黄花,当然,Maven也不会例外.虽然目前它基 ...

  8. 树莓派UFW防火墙简单设置

    ufw是一个主机端的iptables类防火墙配置工具,比较容易上手.如果你有一台暴露在外网的树莓派,则可通过这个简单的配置提升安全性. 安装方法 sudo apt-get install ufw 当然 ...

  9. Windbg使用方法

    hgy413的专栏 http://blog.csdn.net/hgy413/article/category/1143065

  10. IIS7虚拟目录出现HTTP错误500.19(由于权限不足而无法读取配置文件)的解决方案

    今天在window7上配置asp.net网站,但是访问总是提示 错误摘要HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效.详细 ...