IPTV支持TS流的方案形成过程

 直播:现有的ISMA方式,流程如下:

    视频采集-->视频编码-->RTP打包-->UDP组播;

    音频采集-->音频编码-->RTP打包-->UDP组播;

    上面是MP4live的工作流程。

直播:MPEG TS流方式,流程如下:

    视频采集-->视频编码-->

    音频采集-->音频编码-->TS打包-->RTP打包-->UDP组播

    上面是TS流的工作流程。

点播:ISMA方式

    分别读取文件中的音频和视频数据,分别打包到RTP,分别发送出去。

点播:TS流方式

    分别读取文件中的音频和视频数据,打包成TS流,封装到RTP中,然后发送出去。

现在有如下事情需要做:

1.        2010年9月30日搭建环境,测试Darwin服务器是否支持TS流,测试环境如下:

    VLC-->Darwin-->VLC    

       a. 我们分成两步达到这个目标:首先试验VLC1-->VLC2

      VLC流化的配置,可以通过图形界面配置,也可以通过命令行控制。

      VLC1从Darwin服务器请求了媒体数据,然后打包成为TS流,并发送出去,VLC2接收TS流数据,播放;

      整个过程走的通,抓包证明中间确实是TS流。

      当然,也存在问题,就是图形会出现马赛克,猜测是因为B帧的PTS,和DTS有问题。

      还有一个问题是:不能生成sdp文件,因为我们要实现第二步。

      b.  VLC-->Darwin-->VLC 

      Darwin服务器需要一个SDP文件来描述媒体源。

 

2.         问题:VLC在流化过程中,不能生成sdp文件,需要解决这个问题?

错误的写法:

vlc -vvv --extraintf=logger rtsp://115.182.51.78/tv/XingKongDianYing.sdp :sout=#duplicate{dst=rtp{dst=224.1.2.3,mux=ts,port=1234,sdp="file://c:\test.sdp"}}

正确的写法:

vlc -vvv --extraintf=logger rtsp://115.182.51.78/tv/XingKongDianYing.sdp :sout=#duplicate{dst=rtp{dst=224.1.2.3,mux=ts,port=1234,sdp="file://10.57.26.88\guoq\test_100.sdp"}}


3.         问题:VLC在流化过程中,图像质量很差,定位问题?

查看日志,发现:

mux_ts warning: packet with too strange dts (dts=23955930833,old=23956030944,pcr=23956030944)

mux_ts warning: packet with too strange dts (dts=23956097687,old=23956197798,pcr=23956197798)

mux_ts warning: packet with too strange dts (dts=23956231175,old=23956364663,pcr=23956364663)

mux_ts warning: packet with too strange dts (dts=23956398030,old=23956531518,pcr=23956531518)

mux_ts warning: packet with too strange dts (dts=23956564885,old=23956698373,pcr=23956698373)

mux_ts warning: packet with too strange dts (dts=23956731739,old=23956831861,pcr=23956831861)

mux_ts warning: packet with too strange dts (dts=23956898593,old=23956998715,pcr=23956998715)

mux_ts warning: packet with too strange dts (dts=23956278439,old=23957011060,pcr=23956931970)

mux_ts warning: packet with too strange dts (dts=23957044802,old=23957132191,pcr=23957132191)

问题如何解决,现在还不知道。 

而且,使用图形界面配置串流的时候,图像有马赛克。可能有问题。

 4.         直播的方案:

a)         如果解决了问题3,那么直播流化TS,可以通过架设方案完成;

b)        如果不能解决问题3,那么直播流化TS,需要开发方案;可以考虑在MP4live中间加TS流化的代码。

建议采用方案b,因为我们要改写pid等一些信息,需要符合联通的要求,这些是无法通过配置vlc来解决的。 

5.         点播文件的方案:

a)         MP4文件转化为TS文件,然后看Darwin是否能够读取并流化;

b)        MP4文件给Darwin,Darwin读取,然后转为TS流,流化;

经过试验证实:Darwin服务器不支持流化TS类型。在RTSP命令中Describe阶段,返回514错误码:unsupported media type.

Request: DESCRIBE rtsp://10.57.26.88/test.ts RTSP/1.0\r\n

        Method: DESCRIBE

        URL: rtsp://10.57.26.88/test.ts

 

Response: RTSP/1.0 415 Unsupported Media Type\r\n

        Status: 415

 

那么现在的方案有如下两个选择:

a)         读MP4,出TS流;

b)        读TS文件,出TS流;

 

6.         研究TS流的开源代码

a)         MPEG4IP中的mpeg2t;

提取TS流的。

b)        VLC中的mux_ts;

c)        Live555中有没有可供借鉴的?

testMPEG2TransportStreamer.cpp

d)        libtsmux,一个开源的C库

e)         MP4Box,GPAC。

Mp4fileàTS file, or RTP, or UDP.

f)         tstools

       esmerge.c 

7.         直播TS流方案

    视频采集-->视频编码-->

    音频采集-->音频编码-->TS打包-->RTP打包-->UDP组播

8.         点播TS流方案

        Darwin服务器读取TS文件,打包成为RTP数据,发送出去。 

9.         MP4文件转换为TS文件

vlc -vvv --extraintf=logger d:\11.mp4 :sout=#std{access=file,mux=ts,dst=d:\11.ts}

 10.         MP4文件转换为TS流 

vlc -vvv --extraintf=logger d:\11.mp4 :sout=#duplicate{dst=rtp{dst=224.1.2.3,mux=ts,port=1234,sdp="file://10.57.26.88\guoq\test_100.sdp"},dst=display}

11.     做一个测试程序

从MP4文件中读出视频数据,音频数据,打包到TS流,并封装成RTP包,发送出去;使用VLC可以接收并播放。

在《IPTV支持TS流的开发过程》中,会描述这个测试程序是如何开发的。

你可能感兴趣的:(IPTV支持TS流的方案形成过程)