??xml version="1.0" encoding="utf-8" standalone="yes"?>18禁黄久久久AAA片,久久亚洲中文字幕精品一区四,亚洲国产天堂久久久久久http://www.shnenglu.com/elva/category/8814.htmlzh-cnFri, 31 May 2013 07:29:05 GMTFri, 31 May 2013 07:29:05 GMT60TS OVER IP的多画面合成http://www.shnenglu.com/elva/archive/2013/05/31/200717.html叶子叶子Fri, 31 May 2013 06:52:00 GMThttp://www.shnenglu.com/elva/archive/2013/05/31/200717.htmlhttp://www.shnenglu.com/elva/comments/200717.htmlhttp://www.shnenglu.com/elva/archive/2013/05/31/200717.html#Feedback0http://www.shnenglu.com/elva/comments/commentRss/200717.htmlhttp://www.shnenglu.com/elva/services/trackbacks/200717.html
    l于做完了多画面合成的项目,颇有心得Q其间也遇到一些问题,没有|络上的资料自己是很难解决的Q但也不是所有东襉K能在|上扑ֈ办法Q用ffmpeg遇到太多问题Q许多只能通过阅读源码解决。如今做完了Q拿出来与众分n?br />画面合成器是多个承载于UDP的TS(MPTSQSPTSQ解码,解码后囑փ~放成小画面Q再各个源合ƈ?x2,3x3,4x4{方式,实现电视墙的效果?br />目的需求是q样的:
1.UDP输入UDP输出
2.提供源切换的接口Q客户会再某个时L掉某个源
3.良好的异常处理,某个UDP源断或恢复不媄响现有节目。这不是客户的要求,但有q大型项目经验的人知道,q是一定要考虑?br />从实现层面来Ԍ需要以下技术点Q?br />1.UDP单播l播接收
2.TS装的H264与MPEG2视频解码为YUV
3.YUV~放
4.YUV画面拼接
5.合成后的YUV压羃为H264
6.压羃后的视频打包TS
7.打包后的TS通过UDP发?br />8.发送时需要进行流控,保证VLC可正常播放?br />q些技术点不算难,真正的难点在于统{运作,N个源各自的解码后画面输出速度不同Q虽然我们要求各源率相同。各解码U程画面输出虽整体相同,但肯定会忽高忽低。如果每个源都正常的话,我们可以{待每个源都有画面的时候才q行合成。但是我们需要考虑源断与恢复Q就不能一直等待某个源。其二,Z支持源切换,我们应该涉及好运作模式,实现无缝切换Q但q些只是我特?业务的需要,接下来只讲与ffmpeg相关技术?br />先讲上面提到?个技术点QUDP收发׃用说了,值得一提的是接攉要用异步模式,q个在后面会提到。除了YUV画面拼接Q其他都可以用ffmpeg sdk实现。因此主要讨Z用ffmpegq行解码~码Q这U技术文章其实很多,但他们一般只有简单的ҎQ对于这些比较常见的东西Q我们也不做讨论Q只讨论几个重点Q而又~Z资料的问题,主要有:
1.对解码及~码自定义io回掉。UDP接收及发送不通过ffmpeg实现。对于UDP源来_ffmpeg对MPTS支持不好。对于输出UDP来说Qffmpeg没有控

有时我们希望ffmpeg的api打开的不是文件或某个协议的URLQ直接传递数据缓冲给他,ffmpeg不支持传递数据指针给他,要求他编码或解码Q这在ffmpeg api中的实现方式是IO回掉函数。他在需要的时候来调用你的函数来读取或写入。以解码ZQ下面ؓCZ代码Q?br />AVIOContext *pb = avio_alloc_context(pbuf+1316, AVIO_BUF_SIZE-1316, 0, this, ReadDataCb, NULL, NULL);
if (av_probe_input_buffer(pb, &pinFmt, "", NULL, 0, MAX_PROBE_SIZE) < 0)
{
//error...
}
AVFormatContext *pFmtCt = avformat_alloc_context();
pFmtCt->pb = pb;
if (avformat_open_input(&pFmtCt, "", pinFmt, NULL) < 0)
{
//error...
}
d回掉原型如下Q?br />static int ReadDataCb(void *opaque, uint8_t *buf, int buf_size);
实现理念一般应该是除非惌停止解码Q返?1Q否则返回数据长度。保证他d数据

不知道是Z内存寚wq是什么原因,
uint8_t *pbuf = (uint8_t *)calloc(AVIO_BUF_SIZE,1);
pb = avio_alloc_context(pbuf+1316, AVIO_BUF_SIZE-1316, 0, this, ReadDataCb, NULL, NULL);
的时候第一个参数直接传pbuf会崩溃,所?1316
而若使用av_malloczQ虽可以直接传pbuf,却在av_free的时候崩溃,没有扑ֈ原因?br />
2.׃需要实现切换,所以需要将某个源完全销毁,不生内存泄Ԍ不要看q个问题Q网上的很多代码是不对的?br />
销?AVFormatContext
正确销毁方式:
/* close decoder for each stream */
        for (int i = 0; i < pFmtCt->nb_streams; i++)
        {
            if (pFmtCt->streams[i]->codec->codec_id != AV_CODEC_ID_NONE)
            {
                THREAD_MUTEX_LOCK(&g_mutex_avcodec_oc);
                avcodec_close(pFmtCt->streams[i]->codec);
                THREAD_MUTEX_UNLOCK(&g_mutex_avcodec_oc);
            }
        }
        avformat_close_input(&pFmtCt);
        
销?AVIOContext
//不可使用avio_close
    av_free(pb->buffer);
    av_free(pb);

销?AVFrame
AVFrame *pframe = avcodec_alloc_frame();
avcodec_free_frame(&pframe);    


3.多线E用ffmpeg sdk问题
avcodec_open/avcodec_close不是U程安全的,必须q行全局加锁保护Q或者其他同步方式。除了这两个函数外,׃av_find_stream_info内部调用了avcodec_openQ也需要加锁。但av_find_stream_info有可能执行时间比较长Q如果没特别的必要,可以不用此函数。对于解码来_有下面两个函敎ͼ
av_probe_input_buffer
avformat_open_input
大部分情况下已经可以正常解码了?br />
关于压羃
ffmpeg压羃H264 TS时CBRq不好用Q设|了mux_rate会导致TS装出错。老老实实用VBRQ不讄mux_rate
q行H264压羃时一个选项一定要讄的:
preset
在压~效率和q算旉中^衡的预设|可用选项Q?br />ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow and placebo



叶子 2013-05-31 14:52 发表评论
]]>
PAFF 和MBAFF http://www.shnenglu.com/elva/archive/2012/04/18/171874.html叶子叶子Wed, 18 Apr 2012 07:59:00 GMThttp://www.shnenglu.com/elva/archive/2012/04/18/171874.htmlhttp://www.shnenglu.com/elva/comments/171874.htmlhttp://www.shnenglu.com/elva/archive/2012/04/18/171874.html#Feedback1http://www.shnenglu.com/elva/comments/commentRss/171874.htmlhttp://www.shnenglu.com/elva/services/trackbacks/171874.htmlPAFF 和MBAFFQ当寚w行扫描图像进行编码时Q每帧包括两个场Q由于两个场之间存在较大的扫描间隔,q样Q对q动囑փ来说Q中相M行之间的I间相关性相对于逐行扫描时就会减,因此q时对两个场分别q行~码会更节省码流。对帧来_存在三种可选的~码方式Q将两场合ƈ作ؓ一帧进行编?frame 方式)或将两场分别~码(field 方式)或将两场合ƈh作ؓ一帧,但不同的是将帧中垂直盔R的两个宏块合qؓ宏块对进行编码;前两U称为PAFF ~码Q对q动区域q行~码时field 方式有效Q对非运区域~码Ӟ׃盔R两行有较大的相关性,因而frame 方式会更有效。当囑փ同时存在q动区域和非q动区域Ӟ在MB 层次上,对运动区域采取field 方式Q对非运动区域采取frame 方式会更加有效,q种方式q为MBAFFQ预的单位是宏块对?
 

      在隔行扫描中,当有Ud的对象或摄像机移动时Q与逐行相比Q两个相邻行們֐减少l计的相x,q种情况应比每场分别压羃更ؓ有效。ؓ了达到高效率QH.264/AVC在编码Ӟ有以下可选方案:

    ● l合两场成一个完整Q作为~码Q称为模式?/p>

    ● 两场分别~码Q称为场模式?/p>

    ● l合两场成一个完整Q作为压羃。在~码Ӟ划分垂直盔R的两个宏块对成两个场宏块Ҏ帧宏块,再进行编码?/p>

    每囑փ可自适应选择3U模式之一q行~码。在前两U之间进行选择UCؓ囑փ自适应?场编码(PAFFQ,当一帧作Z场编码时Q每场划分ؓ宏块Q编码方式与帧编码方式很怼Q主要有下面的例外:

    ● q动补偿用参考场Q而不是参考?/p>

    ● 变换pL?#8220;之字?#8221;扫描方式不同?/p>

    ● 宏块水^Ҏd滤L器的强度不选用“?#8221;Q因为场行在I间上是两倍行的距离?/p>

    在研制H.264/AVC标准Ӟ据报道,采用ITU-601分L率,PAFF~码技术与帧编码相比可减少码率16%?0%?/p>

    如果囑փp动区和非q动区؜合组成,非运动区用模式、运动区用场模式是最有效的编码方法。因此每个垂直宏块对Q?6×32Q可独立选择~码Q/场)模式。这U编码选择UCؓ宏块自适应?场编码(MBAFFQ。对于模式宏块对,每个宏块包含帧行Q对于场模式宏块对,剙宏块包含场行,底部宏块包含底场行?/p>

    处理场宏块对的每个宏块与帧PAFF模式怼Q然而,因ؓ在MBAFF帧中发生?帧宏块对混合Q需要修改用作下列用途的ҎQ?/p>

    ● 之字型扫描?/p>

    ● q动矢量预测?/p>

    ● 帧内预测模式的预?/p>

    ● 帧内预测帧采L度?/p>

    ● d效应滤L器?/p>

    ● 上下文模型的늼码?/p>

    主要思想是尽可能保留多的I间一致性,MBAFF帧的I间盔R的规范相当复杂,下面讲到的空间相邻都是指非MBAFF帧?/p>

    MBAFF 和PAFF的另一个重要区别是Q用MBAFFҎQ一个场不能使用同一帧的另一个场中的宏块作ؓq动补偿参考。这P有时PAFF比MBAFF~码更有效,特别是在快速全局q动、变换场景、图像刷新等情况下?/p>

    在开发MBAFF标准期间Q据报道Q采用ITU-601分L率,MBAFF~码技术比PAFF相比可减码?4%?6%?/p>

叶子 2012-04-18 15:59 发表评论
]]>
囑փ、、片、NALUhttp://www.shnenglu.com/elva/archive/2011/02/24/140579.html叶子叶子Thu, 24 Feb 2011 04:10:00 GMThttp://www.shnenglu.com/elva/archive/2011/02/24/140579.htmlhttp://www.shnenglu.com/elva/comments/140579.htmlhttp://www.shnenglu.com/elva/archive/2011/02/24/140579.html#Feedback0http://www.shnenglu.com/elva/comments/commentRss/140579.htmlhttp://www.shnenglu.com/elva/services/trackbacks/140579.html囑փ、、片、NALU 是学?H.264 的h常常感到困惑的一些概念,我在q里对自q理解做一些阐qͼƢ迎大家讨论Q?br>

H.264 是一ơ概늚革新Q它打破常规Q?strong>完全没有 I 帧、P帧、B 帧的概念Q也没有 IDR 帧的概念。对?H.264 中出现的一些概念从大到排序依ơ是Q?strong>序列、图像、片l、片、NALU、宏块、亚宏块、块、像?/strong>。这里有几点值得说明Q?br>Q?Q、在 H.264 协议?strong>囑փ是个集合概念Q顶场、底场、都可以称为图?/strong>Q本文图像概忉|都是集合概念Q。因此我们可以知道,对于 H.264 协议来说Q我们^常所熟悉的那些称|例如Q?strong>I 帧、P 帧、B 帧等{,实际上都是我们把囑փq个概念具体化和l小化了。我?strong>?H.264 里提到的“?#8221;通常是指不分场的图像;
Q?Q、如?strong>不采?FMOQ灵zd块排序) 机制Q则一q图像只有一个片l?/strong>Q?br>Q?Q、如?strong>不用多个片Q则一个片l只有一个片Q?br>Q?Q、如?strong>不采?/strong> DPQ?strong>数据分割Q机Ӟ?strong>一个片是一?NALUQ?strong>一?NALU 也就是一个片?/div>
       否则Q?strong>一个片?三个 NALU l成Q即标准“?-1”?nal_unit_type gؓ 2?? ?strong>三个 NALU 属于 一个片Q;  
   2 ~码条带数据分割块A  slice_data_partition_a_layer_rbsp( )

   3 ~码条带数据分割块B slice_data_partition_b_layer_rbsp( )

   4 ~码条带数据分割块C slice_data_partition_c_layer_rbsp( )
 
Q?Q、以上所q的片和 NALU 的大关pdƈ不是抽象概念上的从属关系。从概念?strong>从属关系上来看,NALU其实又是片的一个集合概?/strong>Q例如:标准“?-1”?nal_unit_type gؓ 5 ?NALU 包括 I 片或?SI 片?br>
    一q图像根据组成它的片cd来分Q可以分为标?strong>“?-5”中的 8 U类?/strong>。我们^常应用中所最常见到的其实是这些类?/strong>的特例。例如:我们q_所谓的“I ?#8221;?#8220;IDR ?#8221;Q?/strong>其实?primary_pic_type gؓ 0 的图?/strong>Q我们^常所谓的“P?#8221;其实?primary_pic_type gؓ 1 的图像的特例Q?strong>我们q_所谓的“B?#8221;其实?primary_pic_type gؓ 2 的图像的特例?br>
    一q图像根据概忉|分可以分ZU?/strong>Q?strong>IDR 囑փ和非 IDR 囑փ。一q图像是否是 IDR 囑փ是由l成?strong>囑փ?NALU 军_?/strong>Q如果组成该囑փ?NALU 为标?#8220;?-1”?nal_unit_type gؓ 5 ?NALUQ则?strong>囑փ?IDR 囑փ
Q否则ؓ?IDR 囑փ。这里也有几点值得说明Q?br>
Q?Q、nal_unit_type gؓ 5 ?NALU 只会出现?IDR 囑փ中,?IDR 囑փ中的所?NALU 都是nal_unit_type gؓ 5 ?NALUQ?br>Q?Q、我们以l成一q图像的片的cd来区分该囑փ是否?IDR 囑փ是错?/strong>的?/div>
例如Q?strong>一q图像中的所有片都是 I 片ƈ不代表这q图像就?IDR 囑փ。因?I 片也可以从属?nal_unit_type gؓ 1 ?NALU 也即非IDR囑փ有可能全部包含I?/span>。只不过我们q_最常见到的形式是:所有片都是 I 片的囑փ是 IDR 囑փ。其实这个时?IDR 囑փ的概念也被我们具体化和细化了?但IDR囑փ必定全部包含I片或SI片,不过只有用NALU的类型才能判断是不是IDR囑փ

一q图像由 1~N 个片l?/strong>l成Q?strong>每一个片l?/strong>又由一个或若干个片l成 一个片׃个NALU或三个NALUQ假如有数据分割Q组?/span>?strong>囑փ解码q程中L按照片进行解?/strong>Q然后按照片l将解码宏块重组成图像。从q种意义上讲Q?strong>片实际是最大的解码单元?/div>
 
一个片又包含哪些类型的宏块呢?
标准“?-10”做了最好的说明?/strong>
 
一?I 宏块又分为哪些类型呢Q?/strong>
标准“?-11”做了最好的说明?/strong>
 
一?P 宏块又分为哪些类型呢Q?/strong>
标准“?-13”做了最好的说明?/strong>
 
一?B 宏块又分为哪些类型呢Q?/strong>
标准“?-14”做了最好的说明?/strong>
 
一?P 宏块的亚宏块又分为哪些类型呢Q?/strong>
标准“?-17”做了最好的说明?/strong>
 
一?B 宏块的亚宏块又分为哪些类型呢Q?/strong>
标准“?-18”做了最好的说明?/strong>


叶子 2011-02-24 12:10 发表评论
]]>关于MPEG2中的囑փ序列和图像组头GOP http://www.shnenglu.com/elva/archive/2011/02/23/140515.html叶子叶子Wed, 23 Feb 2011 06:26:00 GMThttp://www.shnenglu.com/elva/archive/2011/02/23/140515.htmlhttp://www.shnenglu.com/elva/comments/140515.htmlhttp://www.shnenglu.com/elva/archive/2011/02/23/140515.html#Feedback3http://www.shnenglu.com/elva/comments/commentRss/140515.htmlhttp://www.shnenglu.com/elva/services/trackbacks/140515.html囑փ序列

囑փ序列是由囑փl构成的Q是随机存取D落?

sequence_header_code – The sequence_header_code is the bit string ‘000001B3’ in hexadecimal

sequence_end_code – The sequence_end_code is the bit string ‘000001B7’ in hexadecimal.

MPEG-2Z实现随机讉KQ在码流中会插入repeat_sequence_header,它可以插在I、P帧或GOP前面Q假如是场编码,只能插在W一场前面?

囑փl头

囑փl(GOPQ是为方侉K机存取而加的,囑փl是随机存取视频单位。一个GOP׃串IBP帧组成,起始为I帧。基准(I/P)的反复频率用M表示Q它描述为多里出CơI/P帧。GOP的长度是一个I帧到下一个I 帧的间隔Q即多少帧里面出CơI帧,一般用N表示Q这个长度是可变的,长GOP可以提供高的压羃比,但是会造成随机存取的gq(必须{到下一个I帧)和误差的U篏QP帧的误差传播Q。一般是一U内有两个I帧,用来作ؓ随机存取的入口。在MPEG2中也没有规定GOP的结构,帧反复方式可以是IPQIBQIBPQIBBPQ甚臛_部是I帧?

M=1 N=XQIPPP...

M=2 N=XQIBPBP...

M=3 N=XQIBBPBBP...

MPEG-2标准中的GOP语法l构如下Q?

group_start_code – The group_start_code is the bit string ‘000001B8’ in hexadecimal.

closed_gop – This is a one-bit flag which indicates the nature of the predictions used in the first consecutive B-pictures (if any) immediately following the first coded I-frame following the group of picture header.closed_gop is set to ‘1’ to indicate that these B-pictures have been encoded using only backward prediction or intracoding.

broken_link – This is a one-bit flag which shall be set to ‘0’ during encoding. It is set to ‘1’ to indicate that the first
consecutive B-Pictures (if any) immediately following the first coded I-frame following the group of picture header may not be correctly decoded because the reference frame which is used for prediction is not available (because of the action of editing).A decoder may use this flag to avoid displaying frames that cannot be correctly decoded.


http://lyj2682.spaces.live.com/blog/cns!177B1314D2038BE4!142.entry



叶子 2011-02-23 14:26 发表评论
]]>
EasyICE使用教程http://www.shnenglu.com/elva/archive/2010/09/17/126855.html叶子叶子Fri, 17 Sep 2010 05:14:00 GMThttp://www.shnenglu.com/elva/archive/2010/09/17/126855.htmlhttp://www.shnenglu.com/elva/comments/126855.htmlhttp://www.shnenglu.com/elva/archive/2010/09/17/126855.html#Feedback2http://www.shnenglu.com/elva/comments/commentRss/126855.htmlhttp://www.shnenglu.com/elva/services/trackbacks/126855.htmlEasyICE TS分析Y?/span>

使用说明

 

目录

功能?/span>... 2

q行环境要求Q?/span>... 2

详细介绍Q?/span>... 2

A.     媒体播放Q?/span>... 3

B.     媒体信息... 4

C.     PSI/SI 5

D.     PIDl计... 6

E.     图表... 6

1.旉戳信?/span>... 7

2.PCR抖动... 8

3.GOP列表... 9

4.GOP抖动... 10

5.码率抖动... 11

F.     数据包视?/span>... 12

G.    工?/span>... 13

1.     PID抽取... 13

2.     重设PID.. 13

3.     204?/span>188. 14

软g~点... 14

其他说明... 14

问题报告... 15

后记... 15

 


 

 

功能?/span>

本程序是一?/span>TS文g静态分析工P支持188/204、单?/span>/多\节目 mpeg2/h.264Q分析模块齐全,支持特大文gQƈh一的处理速度。其主要功能如下Q?/span>

媒体播放

媒体详细信息

PIDl计

同步分析Q?/span>GOPl计Q码率变化分?/span>

PSI/SI解析

TS包列表、十六进制显C,TS_调整字段Q?/span>PES首部解析

 

 

q行环境要求Q?/span>

1.Windowns2000以上操作pȝ

2.IE6.0以上

3.内存Q?/span>128M以上

 

 

详细介绍Q?/span>

选择打开一?/span>TS文gQ?/span>

通过菜单栏或工具栏打开Q或文件拖动到EasyICEQ可以看到如下对话框

 

 

你可以在q里选择分析整个文g或部分数?/span>

 

A.     媒体播放Q?/span>

 

当文件分析完毕,播放器窗口会被初始化Qƈ处于暂停状态,单击播放按钮开始播放?/span>

播控按钮Q?/span>

依次为:播放、暂停、停止、降低播N度、加大播N度、逐播放

播放速度的调整分七个U别Q?/span>

1/4速?/span>1/3速?/span>1/2速、正帔R度?/span>2倍速?/span>3倍速、四倍?/span>

当前播放速度会在“质量”区显C?/span>

“节目”区列Z当前中所含有的节目,单击卛_播放选中节目Q展开可以看到节目的三?/span>PIDQ视频、音频?/span>PCR

“质量”区显CZ当前播放媒体的简单信息,如播N度{,但由于Y仉题有些数据获取不到或存在问题Q请?#8220;媒体信息”栏检结果ؓ准?/span>

 

特别的,软g首先会查找流中的PSI/SI信息Q如果存在,按?/span>PSI/SI信息解析Q如果不存在QY件将自己试视音频PID?/span>PCRPID

 

如果你没有看到播攑֙画面Q表明Y件没有找到视频流或没有找?/span>PCR

 

B.     媒体信息

 

 

该模块显CZ视频序列Q音频的几乎所有参敎ͼ以及视音频流数量。具体不再叙q?/span>

 

 

C.      PSI/SI

 

此模块对所有的PSI/SIq行了解析,当流中存?/span>PSI/SI数据Ӟ会在此模块列出。在视图中点击鼠标右键,可以展开/折叠所有节炏V?/span>

 

D.    PIDl计

 

 

列出当前TS中各个PID出现的数量及占用癑ֈ比,所属类?/span>

 

 

E.      图表

当流中存在多路节目时Q图标界面会昄一节节目选择对话框,单击可以昄相应节目图表

1.旉戳信?/span>

 

旉戛_表显C的是,DTS?/span>PTS出现Ӟ?/span>PCR的采栗与“PCR抖动”图表相同的是Q时间戳?/span>PCR旉为基准?/span>DTS?/span>PTS值取自视频流中的I帧。由于的编码顺序与昄序的关p,不取B?/span>P或其他?/span>PTS?/span>DTSQ否则时间就不是累加的?/span>

滚动鼠标滚轮可以~放/扩展图表昄Q这里大U提供了20倍的扩展Q如果你需要显C更数量的图表,可以在开始分析文件时选择分析一些数据?/span>

囑փ可以用鼠标拖动,来调整显CZ|?/span>

在图表上点击右键Q可以选择当前图标存储ؓpng/jpg{格式的囄?/span>

2.PCR抖动

 

DTS?/span>PCR?/span>PTS?/span>PCR的差?/span>

 

3.GOP列表

 

 

视频?/span>GOPl构

 

4.GOP抖动

 

 

GOPl构变化

 

5.码率抖动

 

码率~码曲线Q图中的每一个点为每ơ采P码率计算方式为:两个PCR包之间的TS包数量除以时?/span>

 

F.      数据包视?/span>

 

数据包列表中昄了包IDQ类型,Payload是否为真以及PCR{数据,炚w某个条目,可以昄相应TS包的十六q制Q及标示位等信息?/span>

在数据包列表点击右键Q可以执行上下翻,或保存选中TS包等操作?/span>

节点列表的包qo器尚未实现?/span>

 

G.     工?/span>

1.      PID抽取

 

填入你要抽取出来?/span>PIDQ如果有多个Q以英文的逗号隔开。此处的PID要填十进?/span>

2.      重设PID

 

填入要重讄原始及目?/span>PIDQgؓ十进?/span>

3.      204?/span>188

 

204包长?/span>TS{?/span>188包长

 

软g~点

相比同类?/span>TS分析软gQ本E序臛_存在以下不Q?/span>

没有Ҏq子q行解析

没有对连l计数校验,PCR间隔校验{验证信?/span>

没有对视频序列协议的解析

没有数据包查扑֊?/span>

没有PIDqo功能Q无法各PID?/span>TS包分cLC?/span>

没有友好的语法分?/span>

没有软复用功?/span>

不支持加解扰

 

其他说明

软g的处理机制是Q当中存在PSI/SI信息Ӟ对节目的分析完全依?/span>PMT对节目的说明Q当不存?/span>PSI/SI信息Ӟ软g会自己判断流中是否含有音视频?/span>PCR{信息,q对分析类型。但是,一些特别的情况Q例如不含有PCR信息Q在“数据?#8221;?#8220;PID”视图中对包类型的昄会是“未知”状态,?#8220;MediaInfo”视图Ҏ的分析则是独立的Q您应当?#8220;MediaInfo”视图昄的结果ؓ准?/span>

问题报告

当您在用过E当中遇到问题,或发现Y?/span>bugQ可以与我联p,h问题详l描qͼ最好再附加上遇到问题的TS5-10M卛_Q,发邮件给我,我会快为您{复?/span>

 

后记

?/span>2.2.1版本P软g取消用时间限Ӟ因ؓ我无法再保障更新速度?/span>EasyICE是业余时间开发,一q多来消耗了太多的时间与_֊Q有时ؓ了设计一U界面布局会考虑好几天,或者ؓ了优化处理速度调整实现方式Q甚x个重构。虽然现在也不尽完美Q但我一直在量地去做。很多理想的功能未实现Q那些可能不再被d了,实在没有旉?/span>

 

本Y件供交流学习使用Q您无须为此支付费用Q但不得用于商业用途?/span>

致谢Q?/span>Easy, hero, 介于01, 师傅:nooby

 

版权所有:ZK天?/span>

Win内核驱动开?/span>QQ75446994

视频~解?/span>QQ85390662

Email: shangxinjian1972@163.com

 

2010/9/14 于北?/span>



叶子 2010-09-17 13:14 发表评论
]]>
LC wince WindowsMobile ~译q程Q{Q?/title><link>http://www.shnenglu.com/elva/archive/2010/08/14/123394.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Fri, 13 Aug 2010 17:01:00 GMT</pubDate><guid>http://www.shnenglu.com/elva/archive/2010/08/14/123394.html</guid><wfw:comment>http://www.shnenglu.com/elva/comments/123394.html</wfw:comment><comments>http://www.shnenglu.com/elva/archive/2010/08/14/123394.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/elva/comments/commentRss/123394.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/elva/services/trackbacks/123394.html</trackback:ping><description><![CDATA[<font color="#9587FF" face="Arial, Helvetica, sans-serif" size="4"><span style="font-size: 14px; line-height: 22px;">Q一Q搭建编译环?br style="line-height: 22px; "><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">Q?Q安装Cygwin?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">下蝲地址Q?a target="_parent" style="line-height: 22px; text-decoration: none; color: rgb(255, 57, 248); ">http://www.cygwin.com/setup.exe</a></p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">以下选项为必选项Q好象是不全Q,版本全按最新的Q条件允许的话,可以全部安装。占用空间比较大?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; "> </p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">Archive <br style="line-height: 22px; ">    unzip (5.52-2)<br style="line-height: 22px; ">    zip (2.32-2)<br style="line-height: 22px; ">Devel <br style="line-height: 22px; ">    autoconf (4-1 2.13-3 2.61-1)<br style="line-height: 22px; ">    automake (2-1 1.10-1 1.4p6-4 1.5-2 1.63-3 1.7.9-3 1.8.5-3 1.9.6-2)<br style="line-height: 22px; ">    binutils (20080624)<br style="line-height: 22px; ">    cvs (1.11.22-1)<br style="line-height: 22px; ">    gcc (3.4.4-3)<br style="line-height: 22px; ">    gcc-core (3.4.4-3)<br style="line-height: 22px; ">    gcc-g++ (3.4.4-3)<br style="line-height: 22px; ">    gcc-mingw (20040810-1)<br style="line-height: 22px; ">    gcc-mingw-core (20050522-1)<br style="line-height: 22px; ">    gcc-mingw-g++ (20050522-1)<br style="line-height: 22px; ">    gdb (6.8-2)<br style="line-height: 22px; ">    gettext (0.15-1)<br style="line-height: 22px; ">    gettext-devel (0.15-1)<br style="line-height: 22px; ">    git (1.6.0.2-1)<br style="line-height: 22px; ">    libiconv (1.11-1)<br style="line-height: 22px; ">    libgcrypt-devel (1.41-4)<br style="line-height: 22px; ">    libtool (1.5.27a-1)<br style="line-height: 22px; ">    make (3.81-2)<br style="line-height: 22px; ">    mingw-runtime (3.15.1-1) <br style="line-height: 22px; ">    nasm (2.02-1)<br style="line-height: 22px; ">    patchutils (0.2.31-2)<br style="line-height: 22px; ">    pkg-config (0.23a-2)<br style="line-height: 22px; ">    subversion (1.5.2-1)<br style="line-height: 22px; ">Editor <br style="line-height: 22px; ">    vim (7.2-3)<br style="line-height: 22px; ">Libs <br style="line-height: 22px; ">    expat (2.0.1-1)<br style="line-height: 22px; ">    libgcrypt (1.4.1-4)<br style="line-height: 22px; ">Web <br style="line-height: 22px; ">    curl (optional: for building extras/contrib) (7.16.3-1)<br style="line-height: 22px; ">    wget (optional: for building extras/contrib) (1.11.3-1)</p><br style="line-height: 22px; ">Q?Q安装mingw32ce?br style="line-height: 22px; "><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">下蝲地址Q?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; "><a style="line-height: 22px; text-decoration: none; color: rgb(255, 57, 248); ">http://cdnetworks-kr-2.dl.sourceforge.net/project/cegcc/cegcc/0.59.1/cegcc_mingw32ce_cygwin1.7_r1375.tar.bz2</a></p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">解压命oQtar xjf arm-mingw32ce-0.59.1.tar.bz2 -C</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">在windows下解压也行,但有的时候会文Ӟ最好用linux命o解压Q解压完拯?opt/mingw32ce  (默认解压在当前目录,q个包是个压~包Q没有\??/p><br style="line-height: 22px; ">Q?Q安装第三方库?br style="line-height: 22px; "><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">下蝲地址Q?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">http://download.videolan.org/pub/testing/contrib/contrib-20091114-wince-bin-gcc-4.1.0-runtime-3.15.2-only.tar.bz2</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">解压刎ͼ<br style="line-height: 22px; ">/usr/wince<br style="line-height: 22px; "></p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; "><br style="line-height: 22px; ">注意一个问题:此处下蝲的库Q一定要和VLC代码匚w?br style="line-height: 22px; "></p><br style="line-height: 22px; ">Q?Q下载VLC代码?br style="line-height: 22px; "><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">下蝲地址Q?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; "><a style="line-height: 22px; text-decoration: none; color: rgb(255, 57, 248); ">http://download.videolan.org/pub/videolan/vlc/1.0.5/vlc-1.0.5.tar.bz2</a></p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">解压目录Q?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">\home\UserName\vlc-1.0.5\</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">q且q入该目录执行:</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">./bootstrap</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">一般没有错误,可能出现的错误:</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">+ aclocal-1.9 -I m4 <br style="line-height: 22px; ">/usr/bin/m4:configure.ac:4643: cannot create temporary file for diversion: Permission denied</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">autom4te-2.61: /usr/bin/m4 failed with exit status: 1 <br style="line-height: 22px; ">aclocal-1.9: autom4te failed with exit status: 1</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">分析Q杀毒Y件有关系?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">解决ҎQ关闭杀毒Y仉新运?/bootstrap?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; "> </p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">x准备工作完成?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; "> </p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; "> Q二Q配|编译选项<br style="line-height: 22px; "></p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">建立一个conf-vlc.sh文gQ徏议用UltraEdit打开Q编辑,如果直接文本~辑的话最后编辑完的文仉要用</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">dos2unix conf-vlc.sh</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">转换脚本的编码格式。(注意行尾的空格和斜线Q最后一行只有空格没有斜U)。文件的开始几行是讄一些\径,一般也不需要修攏V后辚w分主要是对VLC的功能的d和删除。有很多选项都有默认|具体h行命令:</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">./configure –help > conf.txt</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">后,在conf.txt中查看具体选项讄说明?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">下面的列出的是,VLC1.0.5版本讄成功的conf-vlc.sh</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">PATH=/opt/mingw32ce/bin:$PATH \</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">CPPFLAGS="-I/usr/wince/include -D_WIN32_WCE=0x0500" \</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">LDFLAGS="-L/usr/wince/lib" \</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">PKG_CONFIG_LIBDIR=/usr/wince/lib/pkgconfig \</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">./configure --host=arm-mingw32ce \</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">            --enable-dshow --enable-bda --disable-hal --disable-activex --disable-vlc \</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">            --disable-directx --disable-dvdnav --disable-libgcrypt --enable-wingdi \</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">            --disable-remoteosd --disable-sdl --disable-skins2 \</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">            --disable-faad --enable-mad --enable-wingdi --enable-waveout \</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">            --enable-mkv --enable-httpd --enable-libmpeg2 --enable-ogg \</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">            --enable-live555 --enable-realrtsp --enable-bda \</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">            --enable-ffmpeg --with-ffmpeg-mp3lame --with-ffmpeg-faac \</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">            --with-ffmpeg-zlib --enable-faad --enable-flac --enable-theora \</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">            --enable-csri --enable-libass --enable-asademux --enable-freetype=/usr/wince/freetype-2.3.12 \</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">            --enable-release --enable-disable --enable-optimizations --enable-sse --enable-mmx --enable-optimize-memory</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; "> </p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">~辑完conf-vlc.sh文gQ执行脚本:</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">./conf-vlc.sh</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">如果脚本遇到了类似Permission denied的错误,提升脚本的权限:</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">chmod 777 configure-vlc01.sh<br style="line-height: 22px; ">如果q有错误Q一般是对应的库没有Q或者版本不寏V?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">见到以下内容说明脚本q行成功了?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">You can tune the compiler flags in vlc-config. <br style="line-height: 22px; ">To build vlc and its plugins, type `./compile' or `make'.</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; "> </p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">x配置工作完成了</p><br style="line-height: 22px; ">Q三Q编译代?br style="line-height: 22px; "><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">执行命oQ?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">make</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">如果刚执行几行就出现错误Q请重新讄PATHQ命令:</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">PATH=/opt/mingw32ce/bin:$PATH</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; "> </p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">如果中途遇到关键字atoll的错误,打开config.h搜烦关键字atoll</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">注掉以下代码Q?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">#define HAVE_ATOLL 1</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">如果中途遇到关键字iconv的错误,打开config.h搜烦关键字iconv</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">注掉以下代码Q?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">#define HAVE_ICONV 1</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">再遇其他错误Q检查lib是否正确Q实在不行将相关模块?a name="OLE_LINK1" style="line-height: 22px; text-decoration: none; color: rgb(255, 57, 248); ">conf-vlc.sh</a></p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">中disable掉。(需要重新运行conf-vlc.shQ?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; "> </p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">最后打包?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">执行Q?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">make package-wince</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">p直接生成的文g打包成vlc-1.0.5.zip</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">或者执行:</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">make package-wince-base</p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">得到一个vlc-1.0.5的目?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; "> </p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">x我们p得到我们要的DLLs?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; "><br></p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">原地址Q?/p><p style="line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; "><a >http://bk6.blog.163.com/blog/static/24498560201051193449196/</a></p></span></font> <img src ="http://www.shnenglu.com/elva/aggbug/123394.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/elva/" target="_blank">叶子</a> 2010-08-14 01:01 <a href="http://www.shnenglu.com/elva/archive/2010/08/14/123394.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RTSP协议http://www.shnenglu.com/elva/archive/2010/08/13/123313.html叶子叶子Fri, 13 Aug 2010 03:45:00 GMThttp://www.shnenglu.com/elva/archive/2010/08/13/123313.htmlhttp://www.shnenglu.com/elva/comments/123313.htmlhttp://www.shnenglu.com/elva/archive/2010/08/13/123313.html#Feedback0http://www.shnenglu.com/elva/comments/commentRss/123313.htmlhttp://www.shnenglu.com/elva/services/trackbacks/123313.html因ؓ目需要,学习了一下RTSP协议Qؓ了防止以后忘讎ͼ把学习q程和成果记载下来。期间参考了一些网上的资料Qƈ分析了VLC的RTSP报文?/font>
    RTSPQReal Time Streaming ProtocolQ实时流协议Q,是由Real Network和Netscape共同提出的如何有效地在IP|络上传输流媒体数据的应用层协议。RTSP提供一U可扩展的框Ӟ能够提供可控制的Q按需 传输的实时数据,比如音频和视频文件。源数据可以包括现场数据的反馈和存储的文件。RTSPҎ媒体提供了诸如暂停,快进{控Ӟ而它本nq不传输? 据,RTSP的作用相当于媒体服务器的远E控制。传输数据可以通过传输层的TCP/UDP协议QRTSP也提供了ZRTP传输机制的一些有效的Ҏ?br>RTSP消息格式Q?br>RTSP的消息有两大c,一是请求消?request)Q一是回应消?response)Q两U消息的格式不同?br>h消息Q?br>       Ҏ URI RTSP版本 CR LF
       消息?CR LF CR LF        
       消息?CR LF
   其中Ҏ包括OPTIONS回应中所有的命oQURI是接收方Q服务端Q的地址Q例如:rtsp://192.168.22.136:5000/v0
RTSP版本一般都是RTSP/1.0。每行后面的CR LF表示回R换行Q需要接收端有相应的解析Q最后一个消息头需要有两个CR LF
回应消息Q?br>       RTSP版本 状态码 解释 CR LF
       消息?CR LF CR LF
       消息?CR LF
    其中RTSP版本一般都是RTSP/1.0Q状态码是一个数|200表示成功Q解释是与状态码对应的文本解释?br>单的RTSP交互q程Q?br>C表示RTSP客户端,S表示RTSP服务?br>1.C->SQOPTIONS request    //询问S有哪些方法可?br>1.S->CQOPTIONS response   //S回应信息中包括提供的所有可用方?br>
2.C->SQDESCRIBE request   //要求得到S提供的媒体初始化描述信息
2.S->CQDESCRIBE response  //S回应媒体初始化描qC息,主要是sdp
 
3.C->SQSETUP request      //讄会话的属性,以及传输模式Q提醒S建立会话
3.S->CQSETUP response     //S建立会话Q返回会话标识符Q以及会话相关信?br> 
4.C->SQPLAY request       //Ch播放
4.S->CQPLAY response      //S回应该请求的信息
 
S->CQ发送流媒体数据
5.C->SQTEARDOWN request   //Ch关闭会话
5.S->CQTEARDOWN response  //S回应该请?br> 
    上述的过E是标准的、友好的rtsp程Q但实际的需求中q不一定按部就班来。其中第3?步是必需的!W一步,只要服务器客LU定好,有哪些方法可 用,则OPTIONSh可以不要。第二步Q如果我们有其他途径得到媒体初始化描qC息(比如httph{等Q,则我们也不需要通过RTSP中的 DESCRIBEh来完成。第五步Q可以根据系l需求的设计来决定是否需要?br>rtsp中常用方法:
1.OPTIONS
目的是得到服务器提供的可用方法:
OPTIONS rtsp://192.168.22.136:5000/v0 RTSP/1.0
CSeq: 1 //每个消息都有序号来标讎ͼW一个包通常是OPTIONSh消息
User-Agent: bestilyq //自定义的字符?br> 
服务器的回应信息包括提供的一些方法。例如:
RTSP/1.0 200 OK
Cseq: 1         //每个回应消息的cseq数值和h消息的cseq相对?br>Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY //服务器提供的可用的方?br>
2.DESCRIBE
C向S发vDESCRIBEhQؓ了得C话描qC?SDP)Q?br>DESCRIBE rtsp://192.168.20.136:5000/v0 RTSP/1.0
CSeq: 2
Accept: application/sdp
Authorization: Basic YWRtaW46YWRtaW4= //有认证,不需要认证时不需要该字段
User-Agent: bestilyq
 
服务器回应一些对此会话的描述信息(sdp)Q?br>RTSP/1.0 200 OK
Cseq: 2
Date: Sat Feb  5 22:49:39 2009 GMT
Content-Type: application/sdp
Content-Length: 182
 
v=0                     //以下都是sdp信息
o=- 0 0 IN IPV4 127.0.0.1
t=0 0
s=No Name
a=tool:libavformat
m=video 0 RTP/AVP 96 //m表示媒体描述Q下面是对会话中视频通道的媒体描q?br>b=AS:2000
a=rtpmap:96 MP4V-ES/90000
a=fmtp:96 profile-level-id=1
a=control:streamid=0 //streamidQ?表示视频用的是通道0

3.SETUP
客户端提醒服务器建立会话Qƈ定传输模式Q?br>(1)TCP模式
SETUP rtsp://192.168.20.136:5000/v0/streamid=0 RTSP/1.0   
CSeq: 3
Authorization: Basic YWRtaW46YWRtaW4=
Transport: RTP/AVP/TCP;unicast;interleaved=0-1     
User-Agent: bestilyq
(2)UDP模式
SETUP rtsp://192.168.20.136:5000/v0/streamid=0
RTSP/1.0
CSeq: 3
Transport: RTP/AVP;unicast;client_port=3008-3009
Authorization: Basic YWRtaW46YWRtaW4=
User-Agent: bestilyq
    URI中带有streamidQ?Q表C对该通道q行讄?br>    Transport参数讄了传输模式?/font>RTP/AVP/TCP表示通过TCP传输RTP包,RTP/AVP表示使用UDP传输RTP包?/font>unicast表示单播?/font>interleaved 值有两个Q??Q?表示RTP包,1表示RTCP包,接收端根据interleaved的值来区别是哪U数据包。client_port值有3008? 3009Q?008表示客户端接收RTP包的端口Q?009表示客户端接收RTCP包的端口Q服务端要分别将RTP包和RTCP包发送到q两个端口?br> 
服务器回应信息:
(1)TCP模式
RTSP/1.0 200 OK
CSeq: 3
Date: Sat Feb  5 22:35:27 2009 GMT
Session: a522bbb4335617db
Transport: RTP/AVP/TCP;interleaved=0-1
(2)UDP模式
RTSP/1.0 200 OK
CSeq: 3
Date: Sat Feb  5 22:49:39 2009 GMT
Session: 01fa4ca2566a6301      //服务器回应的会话标识W?br>Transport: RTP/AVP/UDP;unicast;client_port=3008-3009;server_port=1024-1025

4.PLAY
客户端发送播放请求:
PLAY rtsp://192.168.20.136:5000/v0 RTSP/1.0
CSeq: 4
Session: a522bbb4335617db      //SETUPq回的会话标识符
Range: npt=0.000-              //讄播放旉的范?br>User-Agent: bestilyq

服务器回应信息:
RTSP/1.0 200 OK
CSeq: 4
Date: Sat Feb  5 22:49:39 2009 GMT
Session: a522bbb4335617db

5.TEARDOWN
客户端发起关闭请?
TEARDOWN rtsp://192.168.20.136:5000/v0 RTSP/1.0
CSeq: 5
Session: a522bbb4335617db
User-Agent: bestilyq

服务器回?
RTSP/1.0 200 OK
Cseq: 5
Date: Sat Feb  5 22:49:47 2009 GMT
Session: a522bbb4335617db

    以上Ҏ都是交互q程中最为常用的,其它q有一些重要的Ҏ如GET_PARAMETER,SET_PARAMETER,PAUSE,REDIRECT{等?br>
psQ?br>sdp的格?br>v=<version>
o=<username> <session id> <version> <network type> <address type> <address>
s=<session name>
i=<session description>
u=<URI>
e=<email address>
p=<phone number>
c=<network type> <address type> <connection address>
b=<modifier>:<bandwidth-value>
t=<start time> <stop time>
r=<repeat interval> <active duration> <list of offsets from start-time>
z=<adjustment time> <offset> <adjustment time> <offset> ....
k=<method>
k=<method>:<encryption key>
a=<attribute>
a=<attribute>:<value>
m=<media> <port> <transport> <fmt list>
v = Q协议版本)
o = Q所有?创徏者和会话标识W)
s = Q会话名Uͼ
i = * Q会话信息)
u = * QURI 描述Q?br>e = * QEmail 地址Q?br>p = * Q电话号码)
c = * Q连接信息)
b = * Q带宽信息)
z = * Q时间区域调_
k = * Q加密密钥)
a = * Q? 个或多个会话属性行Q?
旉描述Q?br>t = Q会话活动时_
r = * Q?或多ơ重复次敎ͼ
媒体描述Q?br>m = Q媒体名U和传输地址Q?br>i = * Q媒体标题)
c = * Q连接信??如果包含在会话层则该字段可选)
b = * Q带宽信息)
k = * Q加密密钥)
a = * Q? 个或多个媒体属性行Q?br>?为可选信息?br>
参考文章:rfc2326QrtspQ;rfc2327Qsdp) Qrfc
3550Qrtp/rtcpQ?/font>

原帖地址Q?br>http://blog.chinaunix.net/u2/77292/showart_1922940.html



叶子 2010-08-13 11:45 发表评论
]]>
IPB帧编码顺序(解码序Q与昄序http://www.shnenglu.com/elva/archive/2010/06/21/118355.html叶子叶子Mon, 21 Jun 2010 05:05:00 GMThttp://www.shnenglu.com/elva/archive/2010/06/21/118355.htmlhttp://www.shnenglu.com/elva/comments/118355.htmlhttp://www.shnenglu.com/elva/archive/2010/06/21/118355.html#Feedback4http://www.shnenglu.com/elva/comments/commentRss/118355.htmlhttp://www.shnenglu.com/elva/services/trackbacks/118355.html

仅仅使用前一个显C的基准帧来~码的被称?#8220;P?#8221;Q同时用前一个显C和未来作ؓ基准帧进行编码的帧称?#8220;B?#8221;。在通常的场景中Q编解码器编码一个I帧,然后向前跌几个帧,用编码I帧作为基准对一个未来P帧进行编码,然后跛_到I帧之后的下一个。编码的I帧和P帧之间的帧被~码为B帧。之后,~码器会再次跌几个帧,使用W一个P帧作为基准~码另外一个P帧,然后再次跛_Q用B帧填充显C序列中的空隙。这个过E不断l,?2?5个P帧和B帧内插入一个新的I帧。例如,?U给Z一个典型的视频帧序列?/p>

通常Q更换场景后的第一帧就?span>I帧,I帧应当全帧传送。从压羃的程度来看,I画面的压~量最;P画面ơ之Q它是以I画面为基QB画面压羃最多。ؓ了加大压~比Q通常在I帧后面相?帧(最?帧)讄1个P帧,在I、P帧之间都是B帧,在两个P帧之间也是设|??帧B帧。B帧传送它与I帧或P帧之间的差g息,或者P帧与后面P帧或I帧之间的差g息,或者它与前后I、P帧或P、P帧^均g间的差g息。当M内容变化愈大Ӟ两个I画面之间的数D;当主体内容变化小ӞI面画的间隔可以适当大一些。或者说QB帧、P帧所占比例越大,囑փ压羃比越高。一般两个I画面盔R13?5帧,盔R帧数不宜再多?/span>

下面?span>15帧ؓ例,说明VCD囑փ帧的排列序。I、P、B三种画面的典型设|方式,对NTSC制共U需半秒旉。节目输入顺序是按实际出现顺序排列的Q即I、B、B、P、B、B、P、B、B……I、B、B、P……Q但Z解码时便于从I、P画面插补得到B画面Q在~码录制节目Ӟ顺序改变了Q即按照I、P、B、B……序Q即改ؓ按原??????????…的画面顺序。解码时先解?帧?帧,再由其插补预计得?帧?帧等{。ؓ此,d解码器内讄动态存储器Q将I、P帧先解码q存储,再计出各个B帧。不q最后输出时Q还是应当按照实际播N序重l读出,按正顺序输出?/span>


韌频编码卡的视频编码算法从JPEG 发展到MPEG-1、MPEG-2、MPEG-4和H.264。JPEG是一U著名的囑փ压羃ҎQ最初由Joint Photographic Experts Group?986q提出ƈ?992q正式成为ISO标准(ISO/IEC 10918),主要应用于静态图像压~,如果把它用在q动囑փ压羃的时候,是我们通常所说的Motion-JPEGQ由于JPEG相当于MPEG的内压~,因而没有去除时域上的冗余,所以在保证一定图像质量的时候,压羃比不高,通常只有10-30倍,但是它有一个固定的优点Q就是gq在40msQ实时性很好,所以在某些Ҏ应用的场合仍然可以看到它的踪影。MPEGq动囑փ~码技术标准是由Motion Picture Experts Group?988q提出,q于1992q?1月通过Q?993q?月作为ISO/IEC 11172标准公布Q这是通常所说的MPEG-1。MPEG-1Zq求更高的压~效率,更注重去除图像系列的旉冗余度。因此引入了I?帧内~码)、P?前向预测~码)、B?双向预测~码)。P帧由前一个I帧或P帧图像来预测Q而B帧由前后的两个P帧或一个I帧和一个P帧来预测Q因而编解码和的显C顺序有所不同Q如?所C?br>
I B B P B B P…B B I    I P B B P B B … I B B
1 2 3 4 5 6 7 …        1 4 2 3 7 5 6 …
  (a) 昄序          (b) ~解码顺?br>                  ?1
        在此有两个问题需要说明:首先是插多少B 帧最合适?理论上说I、P之间插入的B帧越多,压羃比越高,但是~解码器所需的存储器也大Q因此实际应用中一般最多两个。其ơ,B帧的引入会增加编解码端的延迟Q如果追求网l监视的时gQ最好是不用B帧?br>        MPEG-1标准的一个成功应用范例是型Ȁ光视?VCD)。由于它的压~比相对于M- JPEG大ؓ提高Q因而在数字监控pȝ中得到广泛的应用。但是ƈ不是最适合数字监控pȝ的应用,主要表现在码率固定,代h是引起图像质量的抖动Q而数字监控系l最需要的不是恒定码率Q而是恒定质量。同时MPEG-1本n的技术限Ӟ其压~比也没有达到用h意的E度。?000q提出的MPEG-4不仅是一个非常开攄标准Q而且增加了许多新的工P以达到降低某些应用或囑փ场景中要求的囑փ质量所需的比特率。值得注意的是虽然大部分用来降低比特率的工h为非实时应用开发的Q无法用到数字监控pȝ中,但是相对MPEG-1Q由于用半像素?/4像素囑փ匚w、内预、高U运动矢量预等新的技术,因而采用MPEG-4的压~标准之后,在PAL CIF 25fps情况下,大部分情况下码率?00k-500k的MPEG-4压羃囑փ质量过1.25Mbit的MPEG-1囑փQ因而在数字监控pȝ中得到最q泛和成功的应用?br>


叶子 2010-06-21 13:05 发表评论
]]>
视频解码中,~冲区的上溢和下?/title><link>http://www.shnenglu.com/elva/archive/2010/06/18/118152.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Fri, 18 Jun 2010 03:27:00 GMT</pubDate><guid>http://www.shnenglu.com/elva/archive/2010/06/18/118152.html</guid><wfw:comment>http://www.shnenglu.com/elva/comments/118152.html</wfw:comment><comments>http://www.shnenglu.com/elva/archive/2010/06/18/118152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/elva/comments/commentRss/118152.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/elva/services/trackbacks/118152.html</trackback:ping><description><![CDATA[使用g怼的数据处?一般都是数据进?处理后立卛_出去的Ş?所以一般有一个数据进,一个数据出,2个接?<br><br>g处理基本都要求实?数据q来,处理之后马上发处?q个旉要求非常?一般要求控制在好多毫秒以内,才能辑ֈ实时的要?一般硬件每U钟能够处理的数据大?在设计的时候就固定?不能像Y仉?可以通过增加CPU来提升处理能?而且g的缓存的定w也是在设计的时候就固定?不能像Y仉?随意甌内存来用.<br>所以硬件的~存都不会太?~存的数据太?会造成{待数据处理延时太高.达不到实时的要求.<br>g每秒能够处理的数据也是固定的.<br>g在处理数据的时?一般是要等待缓冲区有够的数据可以处理,然后开始处?<br>如果数据输入的速度,固定保持在理想状?那么~冲区就会一直有数据供给gq稳的进行处?<br>输入一直输入数?g一直有数据在处?输出一直在输出处理好的数据.~冲区的数据定w,一直保持在某个范围.<br><br>如果指数据发送太?g处理不过?~存已经装不下那么多数据,开始丢弃这些数?攑ּ处理.q就是指上溢.<br>如果数据发送太?~冲区的数据都处理空?输入数据q没q来,gq在{待~冲区有_数据可以处理,输出接口在要求发送处理好的数据出?是指下? <img src ="http://www.shnenglu.com/elva/aggbug/118152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/elva/" target="_blank">叶子</a> 2010-06-18 11:27 <a href="http://www.shnenglu.com/elva/archive/2010/06/18/118152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转] FFMPEG W记http://www.shnenglu.com/elva/archive/2010/04/23/113336.html叶子叶子Fri, 23 Apr 2010 05:55:00 GMThttp://www.shnenglu.com/elva/archive/2010/04/23/113336.htmlhttp://www.shnenglu.com/elva/comments/113336.htmlhttp://www.shnenglu.com/elva/archive/2010/04/23/113336.html#Feedback0http://www.shnenglu.com/elva/comments/commentRss/113336.htmlhttp://www.shnenglu.com/elva/services/trackbacks/113336.html
1. encode yuv file

ffmpeg -s cif -vcodec mpeg4 -i paris.yuv paris.avi

-s 指定帧大?cif ?352x288Qqcif ?176x144Q?cif ?704x576
-vcodec 指定采用的编码器
-i 指定输入文g


2. output raw YUV420P file

ffmpeg -i paris.avi paris0.yuv


3. 一D视频输Zؓ囄序列

ffmpeg -i 1.avi cat%d.png -vcode png

-vcodec mjpeg
-vcodec ppm


ffmpeg -i 1.avi cat%04d.jpg -vcodec mjpeg -ss 0:1:2 -t 0:0:1

?.avi视频 1?2U?处开始,持箋1U长的视频输Zؓjpg的序?br>

ffmpeg -vcodec mjpeg -i 1.flv test%02d.jpg -ss 0:0:2 -t 0.001

-t 表示持箋旉?.001U,q个命o相当于截取开?U处的一qjpeg的图?br>

4. 多输入单输出

ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg


5. 单输入多输出

ffmpeg -i /tmp/a.wav -ab 64 /tmp/a.mp2 -ab 128 /tmp/b.mp2 -map 0:0 -map 0:0

-map file:stream_index 指定哪一个输入流用于输出,序对应


6. DVD to mpeg4

ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp2 -ab 128 snatch.avi

压制高品质mp4的参考参敎ͼ

'-mbd rd -flags +4mv+trell+aic -cmp 2 -subcmp 2 -g 300 -pass 1/2'

可以试试Q?'-bf 2', '-flags qprd', '-flags mv0', '-flags skiprd'


7. encode mpeg1/mpeg2

ffmpeg -i 1.avi -vcodec mpeg2video 2.mpg

注意mpeg2的codec?mpeg2video

其他codec可以使用 ffmpeg -formats 查看

压制高品质mp1/mp2的参考参敎ͼ

'-mbd rd -flags +trell -cmp 2 -subcmp 2 -g 100 -pass 1/2'

注意Q加 '-g 100' 可能会某些解码器没法解?

可以试试Q?'-bf 2', '-flags qprd', '-flags mv0', '-flags skiprd'


8. encode flv

ffmpeg -i 1.avi -ab 56 -ar 22050 -b 500 -r 15 1.flv


9. X 屏幕录像

FFmpeg can grab the X11 display.

ffmpeg -f x11grab -i :0.0 /tmp/out.mpg

0.0 is display.screen number of your X11 server, same as the DISPLAY environment variable.

ffmpeg -f x11grab -i :0.0+10,20 /tmp/out.mpg

0.0 is display.screen number of your X11 server, same as the DISPLAY environment variable.
10 is the x-offset and 20 the y-offset for the grabbing.


10. 韌频采?br>
ffmpeg -f audio_device -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg

Note that you must activate the right video source and channel before launching FFmpeg with
any TV viewer such as xawtv (http://bytesex.org/xawtv/) by Gerd Knorr. You also have to set
the audio recording levels correctly with a standard mixer.


11. 常用选项

-i filename 输入文g

-f fmt 采用格式fmt

-y 覆盖输出文g

-ss position 搜烦到指定的旉处开?[-]hh:mm:ss[.xxx]的格式也支持

-b bitrate 讄比特率,~省200kb/s

-r fps 讄帧频 ~省25

-s size 讄帧大?格式为WXH ~省160X128.下面的简写也可以直接使用Q?br> sqcif 128X96 qcif 176X144 cif 352X288 4cif 704X576

-vcodec codec 强制使用codec~解码方式?如果用copy表示原始~解码数据必被拯?br>
-sameq 使用同样视频质量作ؓ源(VBRQ?br>
-g gop_size 讄囑փl大?br>
-intra 仅适用帧内~码

-bf frames 使用frames B 帧,支持mpeg1,mpeg2,mpeg4

-ab bitrate 讄音频码率

-ar freq 讄音频采样?br>
-ac channels 讄通道 ~省?

-an 不能音频纪?br>
-acodec codec 使用codec~解?br>
-benchmark 为基准测试加入时?br>
-hex 們ր每一个输入包


12.
mpayer 截图Q?br>
mplayer -ss START_TIME -noframedrop -nosound -vo jpeg -frames N NAME_OF_VIDEO_FILE

获取视频旉(seconds)Q?br>
mplayer -identify movie-filename -nosound -vc dummy -vo null | grep ID_LENGTH


13. 快速合q视频文Ӟ

mencoder -oac copy -ovc copy -idx -o output.avi video1.avi video2.avi video3.avi



叶子 2010-04-23 13:55 发表评论
]]>[转]H.264中的Slice和Slice Grouphttp://www.shnenglu.com/elva/archive/2010/03/19/110083.html叶子叶子Fri, 19 Mar 2010 03:32:00 GMThttp://www.shnenglu.com/elva/archive/2010/03/19/110083.htmlhttp://www.shnenglu.com/elva/comments/110083.htmlhttp://www.shnenglu.com/elva/archive/2010/03/19/110083.html#Feedback1http://www.shnenglu.com/elva/comments/commentRss/110083.htmlhttp://www.shnenglu.com/elva/services/trackbacks/110083.html

? 像映成Slice Group,是把宏块或者宏块对q行映射成不同的Slice GroupQSlice Group,0、Slice Group,1{等Q,在不同的Slice Group中再q行分成Slice Q相对于Slice Group来说QSlice 包含Slice Group内部按照光栅扫描序排列的整C宏块或宏块对Q但是若是相对于囑փ来说q不一定是按光栅扫描的序q箋排列的,因ؓ中间l过了图像到 Slice Group的映。Slice Group的提出是Z采用FMO实现错误隐藏。若是采用映,那么在同一Slice Group中的盔R宏块在实际图像中不一定是盔R的, 那么当某一个Slice Group内的Slice 的宏块发生丢包等错误的时候,可以利用其他Slice Group内的Slice的宏块对其进行预恢复,因ؓ其他Slice Group中的宏块或宏块对与该丢失宏块或宏块对在位|上是相ȝQ相x最强,预测误差最。当不采用Slice Group的时候,若是Slice的宏块发生错误,那么导致一部分I间位置盔R的宏块或宏块Ҏ法解出,那么得利用周边宏块或宏块对对其q行预测Q这 L预测效果随着靠q出错区域中心越差。显Ӟ采用Slice GroupҎ的预效果要好。如图所C?/p>


若红色边框区域发生错误,也即某Slice0发生错误Q那么上图中该区域宏块对应的原始囑փ的位|如左边所C,由Slice Group1恢复Slice Group0 Q由其空间相x可知恢复效果应该会不错?/p>

但是下图的情况就不一样了Q两个片的空间相x没那么强,恢复效果比上一U方法差?/p>


原文链接
http://blog.csdn.net/sunnymov/archive/2009/08/26/4486922.aspx



叶子 2010-03-19 11:32 发表评论
]]>
[转]H264与MPEG中I、P、B帧编码的不同http://www.shnenglu.com/elva/archive/2010/03/19/110082.html叶子叶子Fri, 19 Mar 2010 03:30:00 GMThttp://www.shnenglu.com/elva/archive/2010/03/19/110082.htmlhttp://www.shnenglu.com/elva/comments/110082.htmlhttp://www.shnenglu.com/elva/archive/2010/03/19/110082.html#Feedback0http://www.shnenglu.com/elva/comments/commentRss/110082.htmlhttp://www.shnenglu.com/elva/services/trackbacks/110082.html
1、H264中I、P、B 帧编码的基本程

I 帧编码的基本程为:
(1) q行帧内预测Q决定所采用的内预模式?br>(2) 像素值减去预|得到D差?br>(3) Ҏ差进行变换和量化?br>(4) 变长~码和算术编码?br>(5) 重构囑փqo波,得到的图像作为其它的参考?/p>


P 帧和 B 帧编码的基本程为:
(1) q行q动估计Q计采用间编码流E编码模式的率失真函??倹{P ?br>只参考前面的帧,B 帧可参考后面的帧?br>*(2) q行帧内预测Q选取率失真函数值最的帧内模式与间模式比较,定
采用哪种~码模式?br>(3) 计算实际值和预测值的差倹{?br>(4) Ҏ差进行变换和量化?br>(5) 늼码,如果是间编码模式,~码q动矢量

2、MPEG压羃中的 I、B、P?/strong>

首先,MPEG-1压羃的基本思想:帧内压羃和间压~?br>其次,旉相关性的l计分析:l计的结果表?在间?~2帧的囑փ?各像素只?0%以下的点,其亮度差值变化超q?%,而色度差值的变化只有1%以下?br>
采用的压~方? 分组:把几帧图像分Zl?GOP),为防止运动变?帧数不宜取多?br>1.定义?每l内各囑փ定义ZU类?即I帧、B帧和P?
2.预测?以I帧做为基?以I帧预P?再由I帧和P帧预B?
3.数据传输:最后将I帧数据与预测的差g息进行存储和传输?br>
I?帧内~码?br> I帧特?
1.它是一个全帧压~编码。它全帧图像信息进行JPEG压羃~码及传?
2.解码时仅用I帧的数据可重构完整囑փ;
3.I帧描qC囑փ背景和运动主体的详情;
4.I帧不需要参考其他画面而生?
5.I帧是P帧和B帧的参考(其质量直接媄响到同组中以后各帧的质量);
6.I帧是帧组GOP的基?W一?,在一l中只有一个I?
7.I帧不需要考虑q动矢量;
8.I帧所占数据的信息量比较大?br>
P?前向预测~码帧?/strong>
P帧的预测与重?P帧是以I帧ؓ参考,在I帧中扑ևP?#8220;某点”的预值和q动矢量,取预差值和q动矢量一起传送。在接收端根据运动矢量从I帧中扑ևP?#8220;某点”的预值ƈ与差值相加以得到P?#8220;某点”样?从而可得到完整的P帧?br>P帧特?
1.P帧是I帧后面相?~2帧的~码?
2.P帧采用运动补偿的Ҏ传送它与前面的I或P帧的差值及q动矢量(预测误差);
3.解码时必dI帧中的预g预测误差求和后才能重构完整的P帧图?
4.P帧属于前向预的帧间~码。它只参考前面最靠近它的I帧或P?
5.P帧可以是其后面P帧的参考,也可以是其前后的B帧的参考;
6.׃P帧是参考,它可能造成解码错误的扩?
7.׃是差g?P帧的压羃比较高?br>
B?双向预测内插~码帧?/strong>
B帧的预测与重?br>B帧以前面的I或P帧和后面的P帧ؓ参考,“扑և”B?#8220;某点”的预值和两个q动矢量,q取预测差值和q动矢量传送。接收端Ҏq动矢量在两个参考?#8220;扑և(出)”预测值ƈ与差值求?得到B?#8220;某点”样?从而可得到完整的B帧?br>B帧特?br>1.B帧是由前面的I或P帧和后面的P帧来q行预测?
2.B帧传送的是它与前面的I或P帧和后面的P帧之间的预测误差及运动矢?
3.B帧是双向预测~码?
4.B帧压~比最?因ؓ它只反映丙参考间运动主体的变化情况,预测比较准确;
5.B帧不是参考,不会造成解码错误的扩散?br>
?I、B、P各是根据压~算法的需?是h为定义的,它们都是实实在在的物理,至于囑փ中的哪一帧是I?是随机的,一但确定了I?以后的各帧就严格按规定顺序排列?/p>




叶子 2010-03-19 11:30 发表评论
]]>
[转]帧、场~码的个人理?/title><link>http://www.shnenglu.com/elva/archive/2010/03/19/110081.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Fri, 19 Mar 2010 03:27:00 GMT</pubDate><guid>http://www.shnenglu.com/elva/archive/2010/03/19/110081.html</guid><wfw:comment>http://www.shnenglu.com/elva/comments/110081.html</wfw:comment><comments>http://www.shnenglu.com/elva/archive/2010/03/19/110081.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/elva/comments/commentRss/110081.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/elva/services/trackbacks/110081.html</trackback:ping><description><![CDATA[ <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><span style="font-size: small;">一、概q?/span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;"><span style="font-size: small;">? 始视频Q最原始的视频数据)Ҏ~码的需要,以不同的方式q行扫描产生两种视频帧:q箋或隔行视频Q隔行视频包括场和底场,q箋Q遂行)扫描的视 频与隔行扫描视频有着不同的特性和~码特征Q生了所谓的帧编码和场编码。一般情况下Q遂行q行帧编码,隔行帧可在~码和场~码间选取?img src="http://p.blog.csdn.net/images/p_blog_csdn_net/sunnymov/EntryImages/20090817/%E5%BF%AB%E7%85%A7-2.jpg" alt="扫描格式" height="295" width="816"></span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"> </p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"> </p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-size: small;"><span style="color: black; font-family: 宋体;">在~码中,参考ؓ帧图像,</span><span style="font-family: 宋体;">采用帧运动补偿,两个场是联合~码Q?/span><span style="color: black; font-family: 宋体;">Q在场编码中Q参考ؓ场图?/span><span style="font-family: 宋体;">Q两个场是分别编码,采用动补ѝ?/span></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><font face="宋体"><span style="font-size: small;"></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><br></p><font face="宋体"><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;">帧编码与场编码的选择</p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;">1.对于q动Ȁ烈的情况Q也是画面变化快,画面中的人物、背景等{短旉里就会有很大的变化。这P如果使用帧编码,׃盔R两行Q一行在场Q一行在底场Q的扫描旉相差了许多(因ؓ是隔行扫描)Q那么由于变化剧烈(画面在短旉内就会生很大的差异Q,盔R行没有太多的相关性。而对于场囑փ来说Q相邻行的扫描时间非常短Q所以即使运动剧烈,但还是有很强的时间相x。所以在q种情况下用场编码,p去除旉上的冗余?/p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><br></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;">2.对于相对静止没有什么变化的情况应该相对好理解,因ؓ画面内容没有太大的变化,扫描旉的长短ƈ不媄响相x。倒是帧场的相邻行׃是真正意义上的相邻,所以空间相x肯定要比场的相邻行Q其实是隔行Q的I间相关性要大。那么在q种情况下用~码Q就能去除空间上的冗余?/p></font><p> </p><p><br></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><span style="font-size: small;">二、视频序列、场~码方式</span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">1.</span></span><span style="font-family: 宋体;">固定帧编?/span><span lang="EN-US"><span style="font-family: Times New Roman;">(</span></span><span style="font-family: 宋体;">全</span><span lang="EN-US"><span style="font-family: Times New Roman;">)----</span></span><span style="font-family: 宋体;">视频序列的全部始终采用帧编码方式?/span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">2.</span></span><span style="font-family: 宋体;">固定场编码(全场Q?/span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;"><span style="font-size: small;">视频序列中被分成两个场独立~码。编码规则:</span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt 39pt; text-indent: -18pt;"><span style="font-family: Times New Roman;"><span lang="EN-US"><span><span style="font-size: small;">1.</span><span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">       </span></span></span><span lang="EN-US"><span style="font-size: small;">I</span></span></span><span style="font-size: small;"><span style="font-family: 宋体;">帧可~码成两?/span><span lang="EN-US"><span style="font-family: Times New Roman;">I</span></span><span style="font-family: 宋体;">场或一?/span><span lang="EN-US"><span style="font-family: Times New Roman;">I</span></span><span style="font-family: 宋体;">场和一?/span><span lang="EN-US"><span style="font-family: Times New Roman;">P</span></span><span style="font-family: 宋体;">场,?/span><span lang="EN-US"><span style="font-family: Times New Roman;">II</span></span><span style="font-family: 宋体;">?/span><span lang="EN-US"><span style="font-family: Times New Roman;">IP.</span></span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt 39pt; text-indent: -18pt;"><span style="font-family: Times New Roman;"><span lang="EN-US"><span><span style="font-size: small;">2.</span><span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">       </span></span></span><span lang="EN-US"><span style="font-size: small;">P</span></span></span><span style="font-size: small;"><span style="font-family: 宋体;">帧可~码成两?/span><span lang="EN-US"><span style="font-family: Times New Roman;">P</span></span><span style="font-family: 宋体;">场或一?/span><span lang="EN-US"><span style="font-family: Times New Roman;">P</span></span><span style="font-family: 宋体;">场和一?/span><span lang="EN-US"><span style="font-family: Times New Roman;">B</span></span><span style="font-family: 宋体;">场,?/span><span lang="EN-US"><span style="font-family: Times New Roman;">PP</span></span><span style="font-family: 宋体;">?/span><span lang="EN-US"><span style="font-family: Times New Roman;">PB.</span></span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt 39pt; text-indent: -18pt;"><span style="font-family: Times New Roman;"><span lang="EN-US"><span><span style="font-size: small;">3.</span><span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">       </span></span></span><span lang="EN-US"><span style="font-size: small;">B</span></span></span><span style="font-size: small;"><span style="font-family: 宋体;">帧可~码成两?/span><span lang="EN-US"><span style="font-family: Times New Roman;">B</span></span><span style="font-family: 宋体;">场,?/span><span lang="EN-US"><span style="font-family: Times New Roman;">BB.</span></span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">3.</span></span><span style="font-family: 宋体;">囑փU、场自适应~码</span><span lang="EN-US"><span style="font-family: Times New Roman;"> (PAFF)</span></span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-size: small;"><span style="font-family: 宋体;">视频序列能被~码成一个或两个场Q自适应选择原则是根据采用该U编码方式的每一帧的</span><span lang="EN-US"><span style="font-family: Times New Roman;">RD</span></span><span style="font-family: 宋体;">倹{?/span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">4.</span></span><span style="font-family: 宋体;">宏块U、场自适应Q?/span><span lang="EN-US"><span style="font-family: Times New Roman;">MBAFF</span></span><span style="font-family: 宋体;">Q?/span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span><span style="font-family: Times New Roman;">       </span></span></span><span style="font-family: 宋体;">Zq一步提高编码效率,采用了宏块帧场自适应</span><span lang="EN-US"><span style="font-family: Times New Roman;">.,</span></span><span style="font-family: 宋体;">宏块U采用了宏块对(</span><span lang="EN-US"><span style="font-family: Times New Roman;">MBP</span></span><span style="font-family: 宋体;">Qؓ基本~码单元Q如?/span><span lang="EN-US"><span style="font-family: Times New Roman;">2</span></span><span style="font-family: 宋体;">所C)</span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"> </p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"> <img src="http://p.blog.csdn.net/images/p_blog_csdn_net/sunnymov/EntryImages/20090817/%E5%BF%AB%E7%85%A7-1.jpg" alt="MBP格式" height="282" width="826"></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;"><span>       </span>H.264</span></span><span style="font-family: 宋体;">采用?/span><span lang="EN-US"><span style="font-family: Times New Roman;">MBAFF</span></span><span style="font-family: 宋体;">ҎQ?/span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"></span><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/sunnymov/EntryImages/20090817/%E5%BF%AB%E7%85%A7-3.jpg" alt="H.264 mbaff~码Ҏ" height="339" width="519"> </p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><span style="font-size: small;">在图像中q动比较大的地方采用场编码,q动比较的地方采用帧编码,~码序例子如下Q?/span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><span style="font-size: small;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/sunnymov/EntryImages/20090817/%E5%BF%AB%E7%85%A7-4.jpg" alt="~码例子" height="332" width="462"></span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><br></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;">原文链接Q?/p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><a target="_blank" >http://blog.csdn.net/sunnymov/archive/2009/08/17/4454424.aspx</a><br><span style="font-family: 宋体;"><span style="font-size: small;"></span></span></p><img src ="http://www.shnenglu.com/elva/aggbug/110081.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/elva/" target="_blank">叶子</a> 2010-03-19 11:27 <a href="http://www.shnenglu.com/elva/archive/2010/03/19/110081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MPEG TS 分析工具 EasyICE 2.1.0.0 发布http://www.shnenglu.com/elva/archive/2010/01/06/104883.html叶子叶子Wed, 06 Jan 2010 02:29:00 GMThttp://www.shnenglu.com/elva/archive/2010/01/06/104883.htmlhttp://www.shnenglu.com/elva/comments/104883.htmlhttp://www.shnenglu.com/elva/archive/2010/01/06/104883.html#Feedback1http://www.shnenglu.com/elva/comments/commentRss/104883.htmlhttp://www.shnenglu.com/elva/services/trackbacks/104883.htmlMPEG-TS分析的利?/p>

本程序时一ƾTS静态分析工P怿许多功能是o人欣喜的Q譬如对大文件的支持Q以及处理速度{等。Y件处于不断完善中Q将有更多优U的地方以友好的方式添加进来?/p>

功能介:
1.TS包列表显C,没有条目限制
2.十六q制昄数据
3.TS_调整字段Q以及PES分析
4.保存单个数据?br>5.对大文g的支持,可以支持几百G的文?br>6.可选数据分析,选择只分析文件的某一部分数据
7.psi/si表分?br>8.pidl计
9.同步分析Q图表显C?/p>

 

截图Q?br>

 












q行环境要求Q?br>1.Windowns2000以上操作pȝ
2.IE6.0以上
3.内存Q?28M以上

如果您遇C么问题,h交作者信?br>

本Y件供交流学习使用Q您无须为此支付费用Q但不得用于商业用途?br>致谢QEasy, hero, 介于01, 师傅:nooby
版权所有:2010 ZK天?br>
Win内核驱动开发QQ:75446994
视频~解码QQ:85390662
Email: shangxinjian1972@163.com


下蝲地址



叶子 2010-01-06 10:29 发表评论
]]>
DVB业务信息PSI/SIlDhttp://www.shnenglu.com/elva/archive/2009/09/18/96616.html叶子叶子Fri, 18 Sep 2009 02:46:00 GMThttp://www.shnenglu.com/elva/archive/2009/09/18/96616.htmlhttp://www.shnenglu.com/elva/comments/96616.htmlhttp://www.shnenglu.com/elva/archive/2009/09/18/96616.html#Feedback3http://www.shnenglu.com/elva/comments/commentRss/96616.htmlhttp://www.shnenglu.com/elva/services/trackbacks/96616.html

一、SI信息的构?/p>

1、信息构?/p>

SI信息内容是按照network(|络)→transport stremQ传输流Q?#8594;serviceQ业务)→eventQ事Ӟ的分层顺序描qͼ如图1所C。SI数据信息是按照一定的数据l构q行存储的,q样一来才能达到方ѝ快捷地q行数据索和提取。SI数据主要有:|络信息、传输流信息、业务信息、业务的事g信息{,q且大量的信息都是通过描述W来传输的,所以可用树犉表来存储数据Q构成从|络、传输流、业务、事件的树状l构。机盒接收端的解析主要负责q些SI数据的重建?/p>

在数字电视系l中Qؓ了能有效C众多的数据包中组lvSI信息Q而用了很多的标识。有Network_id(|络标识)、Original_network_id(原始|络标识)、Transport_stream_id(传输标?、Service id(业务标识)、eventid_id(事g标识)、Bouquet_id(业务组标识)。这些标识是作ؓ信息查找定位用的Q例如:要在一个TS里找Z个业务信息,p知道q个业务信息在那个网l里、在哪个TS里和q个业务信息在这个流里的标识Q这样一来,通过层层qoQ就能精地定位描述q个业务信息的位|,q把它们扑և来进行数据组l。图1非常清楚地表明了这U查找思\?/p>

一个网l信息由network_id来定位?/p>

一个TS由network_id、Original_network_id、Transport_stream_id来定位,标明q个在那个|络播发Q它原属那个|络Qƈl它加上标识?/p>

一个业务由network_id、Original_network_id、Transport_stream_id、service_id来定位,标明q个业务在那个网l播发,它原属那个网l和那个,q给它加上标识。这体现在SDT表中?/p>

一个事件由network_id、Original_network_id、Transport_stream_id、service_id、event_id来定位,标明q个事g在那个网l播发,它原属那个网l和那个及那个业务Qƈl它加上标识。这体现在EIT表中?/p>

据此Q根据各个SI表的功能Q各表的IDl构如下Q?/p>

NITQnetwork_id、Original_network_id、Transport_stream_id 、service_id?/p>

SDTQOriginal_network_id、Transport_stream_id 、service_id?/p>

EITQOriginal_network_id、Transport_stream_id 、service_id、event_id?/p>

BATQbouquet_id 、Original_network_id 、Transport_stream_id 、service_id?/p>

另外Q还有一个PIDQ包标识Q,它的作用是给每一个数据包打上一个标讎ͼTS承蝲有视频数据、音频数据、PSI和SI信息数据、图文电视数据、字q数据、数据广播数据、交互业务数据、CApȝ的控制信息数据等{,除了PSI和SI信息数据和CApȝ的控制信息数据外Q其他的数据的PID都是通过PMT表给出的QCApȝ的控制信息数据的PID是由CAT表给出的Q而承载了PSI和SI信息的各U表的PID值是固定分配的。如下表

?nbsp;                       PID?/p>

PAT                     |            0X0000
CAT                      |            0X0001
TSDT                    |             0X0002
NIT、ST                 |           0X0010
SDT、BAT、ST   |          0X0011
EIT、ST               |        0X0012
RST、ST               |          0X0013
TDT、TOT、ST    |          0X0014
DIT                        |          0X001E
SIT                        |          0X001F

׃q些表是分配了固定的PID|所以机盒可以根据这些PID值来辨认出是什么表Qƈd表中的描q参数来生成EPG信息和完成各U数据的l织、解码出所需要的节目和信息?/p>

2、表的构?/p>

表是l成SI信息的一U数据结构。在TS中有很多不同节目的数据包Q解码器如何定哪个数据包属于某个节目?其答案就是在TS中的PSI和SI信息里,q些信息_地指引出获得某节目与该节目数据包的PID之间的关pR?/p>

由MPEG-2定义的TS里面Q数据包携带了两cM息:一是音、视频等素材的数据,二是PSI表。具有给定PID的数据包的有序排列就形成了TS。PSI表里的承载的内容主要是TSQ本节目)的描q参数。由MPEG-2定义的PSI主要包含有三个表QPAT、PMT、CAT。每个表都可作ؓ一个或多个TS包的净h入TS中传送?/p>


一个TS数据包的净荷ؓ188个字节,当一个PSI/SI表的字节长度大于184字节Ӟp对这个表q行分割QŞ成段QsectionQ来传送。分D|制主要是一个数据表分割成多个数据段。在PSI/SI表到TS包的转换q程中,DvC中介的作用。由于一个数据包只有188字节Q而段的长度是可变的,EIT表的D限?096字节Q其余PSI/SI表的D限长ؓ1024字节。因此,一个段要分成几部分插入到TS包的净荷中。如?所C?/div>
PSI/SI表的构成是:一个表׃个或多个子表构成Q表用table_id来标识;不同的子表由table_id和table_id_extension来区分(h相同的table_id和不同的table_id_extensionQ;一个子表由一个或多个D|成(h相同的table_id和table_id_extensionQ不同section_number来区分)Q每个段由多个TS数据包的数据l成。每个段h一个完整的数据l构Q表的重要参?---描述W在D里传送。图3所C是SDT表的l构?br>


Q?024Q时Q可把子表分割成两个或更多个D, q过section_number来区分,如图3-1所C?/div>
不同的信息表在TS中通过PID来区分,h相同PID的不同表由table_idQtable_id是表标识Q来区分Q属于同一个table_id的不同子表由table_id_extension、版本号(version_number)q行区分Q属于同一个子表的不同D는section_number区分。表的扩展标识符有:network_id、oringinal_network_id、boquet_id、tansport_stream_id、service_id{?/div>
l         对于NIT表的子表h相同的table_id、network_id和version_number?/div>
l         对于BAT表的子表h相同的table_id、bouquet_id和version_number?/div>
l         对于SDT表的子表h相同的table_id、oringinal_network_id、tansport_stream _id和version_number?/div>

l         对于EIT表的子表h相同的table_id、oringinal_network_id、tansport_stream _id?service_id和version_number?/p>

    以EIT表ؓ例。EIT的PID?X0012Q当它的table_id=0X4EӞEIT描述的是在当前TS中的当前/后箋QEIT present/followingQ事件信息;table_id=0X4FӞEIT描述的是在其它TS中的当前/后箋QEIT present/followingQ事件信息。这两个不同的描qŞ成了EIT的两个表。每个表分ؓ两个D,一个段用来描述当前正在播放的事Ӟ另一个段用来描述卛_播放的事件。此时两个段的table_id、service_id、tansport_stream_id是相同的Q但section_number不相同,section_number 0x00用来描述当前事gQsection_number 0x01描述下一个事件?/p>

?|络描述表(NITQ的作用
在MPEG2中由于ƈ没有对NIT表进行定义,所以在PSI中NIT表内ҎU有的,但在DVB中给NIT表作了明的定义Q所以NIT表是一个全局表,是一个数字电视系l只对应两个NIT表,分别为当前网l表Qtable_id=0X40Q和其他|络表(table_id=0X041Q,每个不同的网l视光Ҏ(1个TS=1个频?的多对应一个或多个子表Q通过network_id来区分?/div>

    NIT表主要是提供有关物理|络的信息,|络信息表传送本|络以及与此有关的其它网l的一些信息。每个网l都有唯一的识别符Qnetwork_idQ。网l信息表主要携带Q网l识别符(Network_ID)、网l名U、传输系l参?有线传输pȝ参数包括Q频率、调制方式、FEC外码、符L、FEC内码)、节目业务类型及Service_ID{信息。机盒只要调谐到携带NIT表的传送流中,卛_提取其它|络的参敎ͼ一般解码器便可Ҏ提取出来的信息,自动搜烦频道?/p>

    q里说一说network_id和oringinal_network_id的分别。每个运营商都需要注册唯一的network_idQ假设中央电视台的network_id=0X01Q广州电视台的network_id=0X02       。当中央电视台直接播发自q节目Ӟnetwork_id=oringinal_network_idQ如果由q州电视台{播中央电视台的节目时Q那么network_id=0X02Qoringinal_network_id=0X01。也是说oringinal_network_id{于节目原发q营商的network_id?/p>

?nbsp;    业务描述表(SDTQ的作用

SDT表是由DVB定义的,是一个SI表,因此它是一个全局表,一个数字电视系l对应两个SDT表,分别为当前流Qactual transportQ表Qtable_id=0X42Q和其他?other transport)表(table_id=0X46Q。每一个TS对应一个子表(也有对应多个子表的,如同一个TS但业务来自不同的original_networkQ,通过tansport_stream_id和original_network_id来区分。图4是一个SDT表的构成图。从囑֏看出Q这个SDT表由两个表组成,一个是当前表Q只有一个子表;另一个是其他表Q由三个子表l成Q每个流对应一个子表?/p>

  

SDT表用于描q系l中业务的名U、业务提供者、是否有相应的事件描q表{方面的信息Q业务描q表可以描述当前传输,也可以描q其他传输流Q这p的Table_ID来区分。业务描q表提供了如下的信息Q属于哪一个节目业务群Q节目业务的cdQ如PAL、NTSC、SECAM、调频广播、图文电视、准视频Ҏ{;节目业务的提供者;可以接收该业务的国家和不可以接收该业务的国家Q指向特定的链接信息Q实现准视频Ҏ的指g息;实现多画面的控制信息Q指CZ用的加密pȝQ给出实C互式回传信道的电话号码;提供多语U的节目业务名称和广播者以及私有数据。但最常用的是业务列表Q即对业务名U的描述Q如中央1台、广州新d、珠江台{等?/p>

?nbsp;    事g信息表(EITQ的作用

EIT表是由DVB定义的,是一个SI表,因此它是一个全局表,一个数字电视系l每一个业务对应两UEIT表。一是EIT present/following表(描述当前事g/后箋事gQ,一个业务对应着一个EIT present/following表,EIT present/following表分为当前流表(table_id=0X4EQ和其他表Qtable_id=0X4FQ,每一个流通常对应6个(?个业务)EIT present/following子表Q每个子表由两个D늻成,分别是EIT presentD和EIT followingD,section_number= 0x00的段描述当前播放的事Ӟ section_number= 0x01D|q后l播放事Ӟ?所C。其他流表结构与当前表相同Q二是EIT scheduleQ时间表Q表Q一个业务最多可对应16个EIT schedule表,那么每个通常最多可对应6Q业务数Q?#215;16=96个子表,每个子表?56个段l成Q由于分D号?个比特,所以最多只能有256个分D)Q?/p>

对于EIT schedule表,它是用作描述一个业务在一D|_可以是一天、一周,最大可以是64天,Ҏ冗余带宽来进行设定)内所播放的节目安排,节目的播出安排是以时间和节目介作为描q的。时间及内容是描qC个事件的最基本元素Q例如:把一个业务所播放的每一个节目都看成是一个事Ӟ那么每一个节目开始播攄旉和播放时间的长度及事件的内容是该事件的基本元素QEIT schedule子表是用这一基本元素来描q每一个事件ƈ产生某一D|间内要发生的所有事件的列表Q因此EIT schedule子表的信息量很大QEIT表的D限?096字节Q,?56个sectionl成Q所以又引入了segmentQ片D)的概c把256个段分成32个segmentQ一个segment?个sectionQ分D)l成Q每个segment可以描述3个小时的事g信息Q也是_一个EIT schedule表由32个片D늻成,每个片段?个分D늻成,通过section_number来区分,那么每个子表可描q?2*3=96时Q?天)的事件信息,׃一个业务最多可对应着16个EIT schedule表,则对于一个业务来说最多可以描q?6(0X50----0X5F)*4=64天的事g信息。这里,segment相当于一个事件组Qsection是事件组内具体的一个事件。EIT schedule表也分ؓ当前表Qtable_id=0X50---0X5F ?6个)和其他流表(table_id=0X60---0X6F ?6个)Q?EIT schedule表是可选的Q即pȝ可以发送此表也可以不发送此表)Q事件信息按旉序排列?/p>

EIT表包含事件或节目的有x据,如事件的名称、开始时间、持l时间、运行状态等。事件信息表提供如下信息Q节目段的标识号、v始时间、持l时间、播攄态、是否加密;指向特定信息的链接信息;节目D多语种的简短介l;节目D늚详细介绍Q两D同栯目段的时间偏U;基本码流cd介绍Q如视频的幅型比、伴音的cd、字q的cd{;使用的加密系l介l;节目cd介绍Q如电媄/戏剧、新闅R综艺、体肌Ӏ少ѝ音乐、艺术、社会政沅R文教等Q节目限定年龄的U别介绍Q给出实C互式回传信道的电话号码;为满_节目D늚码率而提供的~存大小信息及私有数据。事件信息中提供了类gq播电视报所提供的节目表的内容,ҎEIT及其它表所提供的信息,可以做出各种EPG功能Q如按节目类型检索、按旉索及Ҏc节目的锁定{。可以说EIT表是提供EPG信息的主要表Q也是结构最复杂的SI表?/p>

在EIT present/following表中Q每一事g都用一个event_id来标识它Q每一个事件的序关系Q当前正在发生的事g/后箋发生的事ӞqEIT present/following来描q?/p>

那么如何来识别当前正在发生的事情和后l发生的事情呢?那是通过event_id来标识的Q如?所C。图中event_id=0X49表示当前正在发生的事Ӟevent_id=0X4A表示后箋发生的事件。那么在当前事g完成q入后箋事gӞ此时的后l事件变成当前事Ӟ后箋事g由一个新的事件代ѝ这一变化是用version_number来加以描q的。例如:

当前播出 19Q?0----19Q?0 新闻联播 event_id=0X49Q?/p>

后箋播出 19Q?1----20Q?0 动画?event_id=0X4AQ此时version_number=0

设新的后l?21Q?1---21Q?5 曲艺节目。当新闻联播完成后,则变化ؓQ?/p>

当前播出 19Q?1----20Q?0 动画?event_id=0X49Q?/p>

后箋播出 21Q?1----21Q?5 曲艺节目 event_id=0X4AQ此时version_number=1

?/span>6是由SDT表和EIT表所产生?/span>EPG信息Q图7是由EIT表所产生的一个节目频道的节目播出旉表?br>    

EIT表是SI表中l构最复杂的表Q图8是它的结构图?/span>

机顶盒通常都有一?#8220;节目指南”的按钮,按动它就可以dEIT schedule自表里的信息Q显C某一个业务在某段旉内的所有事件列表?/span>

?span>     业务l关联表Q?/span>BATQ的作用

BAT表是?/span>DVB定义的,是一?/span>SI表,因此它是一个全局表,一个数字电视系l只对应一?/span>BAT表,?/span>table_id=0X4A。一个节目类别对应一个段?/span>Z让受众能更方便地在众多的节目中寻扑և自己喜欢的节目,往往需要提供一U把众多的节目频道进行分cȝҎQ一个类相当一个节目组Q。例如把电媄频道归ؓ“家庭影院”的类别,把电视连l剧归ؓ“电视剧场”的类别等{,BAT表就提供了这一功能Q每一个类别都用一?/span>bouquet_id 来标识。它包括了节目业务名UͼcdQ及节目l所包含的节目清单(节目列表Q?/span>BAT表在SI信息中属于可选表?/span>

BAT表还支持一个特别的描述W,UCؓ国家获得性描q符。此描述W的意义是:q营商可能出于运营的需要,把一些业务提供给特定Q国Ӟ的h收看,而不希望l其他(其他国家Q的人群收看Q那么,可以利用国家获得性这一描述W,在其他h收看节目时不显C些业务。这个描q符同样支持SDT表,不过?/span>SDT 表中指的是某一个业务,而不是一个业务组。所以,BAT表概括地说是提供l不同观众不同组合节目的一U方法?/span>

?/span> 其他?/span>

对于PAT?/span>PMT?/span>CAT表,都是?/span>MPEG-2定义的,?/span>PSI里面的表Q所以这三个表都不是全局表,它们存在在每一?/span>TS中?/span>PSI信息使用q?/span>3个表来定义码的l构Q一?/span>TS对应一?/span>PAT表;一?/span>CApȝ和一?/span>TS对应一?/span>CAT表,CAT表的PID值L1Q每?/span>CAT都只l出其所在流?/span>EMMQ包括携带组密钥?/span>EMM和携带品密钥的EMMQ包?/span>PID{信息;一个业务(节目频道Q对应一?/span>PMT表,一?/span>TS对应多个PMTQ视中所携带的业务数而定Q且只对应本的业务?/span>

PAT?/span>PID?/span>0Q它?/span>PSI信息的根Q要查找信息旉先必MPAT开始,表中列出了传送码中所有节目所对应?/span>PMT?/span>PIDQ可Ҏq些PID扑ֈ相应?/span>PMT包。在PMT表中又可以找C节目有关的所有基本码,如视频、音频?/span>ECM和数据等有关信息?/span>PIDQ然后把q些标有q一PID的数据包l织h通过解码Q把节目或数据还原出来?/span>

以上PSI的几个表?/span>NIT表是解码所必需的表Q?/span>SDT?/span>EIT是构成业务信息所必需的表?/span>

SIq有其他的表Q如Q?/span>TDT表,UCؓ旉日期表,它给Z当前的时间和日期的信息,有时也可作ؓ机顶盒解码时钟的更新Q?/span>RST表,UCؓq行状态表Q属于可选表Q它用于快速更新某节目或某些节目的q行参数Q?/span>RST只有在状态或节目变更时才发送一ơ;ST表,UCؓ填充表,属于可选表Q它用来替代不传送的表?/span>

?/span> 描述W?/span>

描述W是用来携带节目要素?/span>TS等的各U参数的信息l构、语法与语义Q描q符?/span>PSI/SI表的构成MQ?/span>PSI/SI表的主要意义是传送这些描q符Qؓ机顶盒提供相关业务描qCq行参数Q可以认?/span>SI表是舟而描q符是舟上的货物。描q符的通用l构都是?/span>descriptor_tag (描述W标?/span>)字段与紧跟其后的descriptor_lengthQ描q符长度Q字D开始。每?/span>SI表通常都用特定的描述W,但也不限制这些描q符在其他表中用?/span>

描述W是随用它?/span>SI表一起发送的?/span>

描述W以及在它们?/span>PSI/SI表中的位|见下表


?/span>PSI/SI表里Q我们通常都看C个@环语句,如:

for(I=0;I<N;I++){

descriptor()

}

q个循环语句是用来引导机盒d描述参数用的Q以SDT子表ZQ由于一?/span>SDT子表里面包含了对多个业务的描qͼ每个业务的都使用?/span>Multilingual_service_name_descriptor?/span>service_descriptor描述W,也就是说一?/span>SDT子表里同L描述W被使用了多ơ(也可以理解ؓQ一个描q符里存有多个描q参敎ͼQ通过循环语句来对描述W进行重复有序的dQ来提取里面的描q参敎ͼ直到d为止?/span>

|络信息表(NITQ的D|据结构:

Netwok_information_section(){ |络信息D?/span>

Table_id   8bit 表标?/span>

Section_syntax_indicator 1bit D序列指C?/span>(标记?/span>),此?/span>=1?/span>,规定?/span>sectionW?/span>43位开始的5位是版本?/span>

Reserved_future_use 1bit 保留来使用字段

Reserved   2bit 保留字段

Section_length 12bit D长?/span>

Network_id 16bit |络标识

Reserved   2bit 保留字段

Version_number   5bit 表版本号Q作更新机制

Current_next_indicator 1bit 当前/下一个有效指CZQ标CQ,表示当前表是否有效,如果Current_next_indicator?/span>1,则当前表有效;0表示当前表无?/span>.

Section_number 8bit 当前D|?/span>

Last_section_number 8bit 最后段?/span>(反映了这个子表由多少个段l成Q如其gؓ0X01那么表示q个子表׃个段l成)

Reserved_future_use   4bit 保留来使用字段

Network_description_length 12bit |络描述W长?/span>

For(I=0;I<N;I++){ 获取|络

Descriptor()   d|络描述参数Q网l名U描q符、连接描q符Q?/span>

}

reserved_future_use 4bit 保留来使用字段

transport_stream_loop_length 12bit 传输@环长?/span>

for(I=0;I<N;I++){ 获取传输(整个pȝ的传输流Q?/span>

transport_stream_id 16bit 传输标?/span>

original_network_id 16bit 原始|络标识

reserved_future_use 4bit 保留来使用字段

transport_descriptors_length 12bit 传输描述W长?/span>

for(j=0;j<N;j++){ 获取传输的描述子(有线传送系l描q符、业务列表描q符{)

descriptor() d描述参数

}

}

CRC_32 32bit 循环校验?/span>

}



叶子 2009-09-18 10:46 发表评论
]]>ffmpeg和mencoder的编译方?http://www.shnenglu.com/elva/archive/2009/08/03/92025.html叶子叶子Mon, 03 Aug 2009 06:30:00 GMThttp://www.shnenglu.com/elva/archive/2009/08/03/92025.htmlhttp://www.shnenglu.com/elva/comments/92025.htmlhttp://www.shnenglu.com/elva/archive/2009/08/03/92025.html#Feedback0http://www.shnenglu.com/elva/comments/commentRss/92025.htmlhttp://www.shnenglu.com/elva/services/trackbacks/92025.html

**************ffmpeg的编?***************

1。首先获取ffmpeg 如果已经获取了ffmpeg的tar包那W一步可以蟩q?/p>

很多人找不到怎么下蝲,其实之前ffmpeg可以通过cvs下蝲Q不q最q他已经换成了更加强大的svn

如何使用SVN我这里不再介l,|上q有大量的安装和使用的文章可以借鉴Q这里简单罗列几个SVN辅助的YӞ

SubVersionQ从 http://subversion.tigris.org/ 下蝲Q支持linuxQ我们这里就装这?/p>

TortoiseSVNQ从 http://tortoisesvn.tigris.org/ 下蝲Q是很不错的SVN客户端程序,为windows外壳E序集成到windows资源理器和文g理pȝ的Subversion客户端,用v来很方便Qcommit动作变得像Winrar右键压羃一hѝ?/p>


okQ先装subversionQ记住最好之前装qapr和apr-utilQ在apache.org|站能下?/p>

wget http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz
tar zvxf subversion-1.3.2.tar.gz
cd subversion-1.3.2
./configure --with-apr=/usr/local/apr-httpd --with-apr-util=/usr/local/apr-util-httpd/
make
make install


到此Q我们就可以通过svn命o获取最新的ffmpeg?/p>

svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

你会发现在你所在的目录Q自动出C个ffmpeg的目录,是你下载的源代码?/p>


我们q不能这么快~译ffmpegQ应该如果要让ffmpeg支持更多格式的{换,q需做一些前期工?/p>


2.支持mp3Qlinux当然是lameQ下载解?br>tar zxvf lame-3.97b3_.tar.gz
cd lame-3.97.1
./configure --prefix=/usr  --enable-shared
make
make install
q里推荐量装在/usr下,默认是装?usr/local下。这样ffmpeg~译都能利的找到库文g


3.支持Ogg和Vorbis:
as4你可以安装一下如下tar?br>libvorbis, libvorbis-devel,libogg, libogg-devel
tar jxvf libvorbis-1.1.1-1-src.tar.bz2
cd libvorbis-1.1.1-1
./configure --prefix=/usr  --enable-shared
make
make install
其他的(libvorbis-devel,libogg, libogg-develq三个tar直接解压可以了用tar jxvf libvorbis-devel.........)

4.支持xvid x264Q现在最行的两U高质量的压~格?br>xvid的编译安?br>下蝲 http://downloads.xvid.org/downloads/xvidcore-1.1.0.tar.gz
tar zvxf xvidcore-1.1.0.tar.gz
cd xvidcore-1.1.0/build/generic/
./configure --prefix=/usr --enable-shared
make
make install


***在安装X264之前必须安装nasm-0.98.39.tar.bz2 不然X264装不上去***
下蝲nasm-0.98.39.tar.bz2
tar jxvf nasm-0.98.39.tar.bz2
cd nams-0.98.39
./configure --prefix=/usr --enable-shared
make
make install

下蝲 x264-snapshot.tar.bz2
tar jxvf  x264-snapshot.tar.bz2
cd  x264-snapshot.tar.bz2
./configure --prefix=/usr --enable-shared
make
make install


5.AC3和dts~码的支?br>as4pȝg已经支持ac3~码Q编译的时候只要加--enable-a52 --enable-gpl参数p

libdts-0.0.2.tar.gz~译参数
tar zxvf libdts-0.0.2.tar.gz 
cd libdts-0.0.2
./configure --prefix=/usr --enable-shared
make
make install


6.mpg4 aac格式支持Q由于服务器q针Ҏ机用h务,所以,cMaacQmpg4铃声格式的支持,我们也得做。这里我们安装faad2和faacp
下蝲请到http://www.audiocoding.com/modules/mydownloads/

***先编译FAAD2Q然后在~译FAAC。有个先后顺序的***

//////////////////////////FAAD2的编译\\\\\\\\\\\\\\\\\\\\\\\\\\\\
tar zxvf  faad2-2.5.tar.gz
cd faad2
在编译FAAD2时可能出现的错误Q参照你的错误现象去修改

错误现象Q?/p>

cd faad2
[root@TServer faad2]# autoreconf  -ivf
autoreconf: Entering directory `.'
autoreconf: configure.in: not using Gettext
autoreconf: running: aclocal --force
autoreconf: configure.in: tracing
autoreconf: running: libtoolize --copy --force
autoreconf: running: /usr/bin/autoconf --force
autoreconf: running: /usr/bin/autoheader --force
autoreconf: running: automake --add-missing --copy --force-missing
configure.in: installing `./install-sh'
configure.in: installing `./missing'
common/mp4ff/Makefile.am: installing `./compile'
common/mp4ff/Makefile.am: installing `./depcomp'
plugins/Makefile.am:12: required directory plugins/bmp does not exist
plugins/xmms/src/Makefile.am:2: libdir was already defined in condition TRUE, which includes condition HAVE_BMP ...
configure.in:10: ... `libdir' previously defined here
plugins/xmms/src/Makefile.am:8: libdir was already defined in condition TRUE, which includes condition !HAVE_BMP ...
configure.in:10: ... `libdir' previously defined here
Makefile.am: installing `./INSTALL'
autoreconf: automake failed with exit status: 1

解决ҎQ?br>只要把BMP相关的编译条Ӟ一般都是以if-else形式存在的,注意要把整个块都删除Q都removeQ就好了?br>操作如下Q?br>[root@TServer faad2]# cd plugins/
[root@TServer plugins]# grep -lr BMP *
Makefile.am
xmms/src/libmp4.c
xmms/src/Makefile.am
[root@TServer plugins]# vi Makefile.am
if HAVE_MPEG4IP_PLUG
if HAVE_XMMS
SUBDIRS = xmms mpeg4ip
else
SUBDIRS = mpeg4ip
endif #HAVE_XMMS
else
if HAVE_XMMS
SUBDIRS = xmms
else
SUBDIRS =
endif #HAVE_XMMS
endif #HAVE_MPEG4IP_PLUG
~
~
~
~
~
~
~
"Makefile.am" [dos] 13L, 200C 已写?nbsp;                       
[root@TServer plugins]# grep -lr BMP *
xmms/src/libmp4.c
xmms/src/Makefile.am
[root@TServer plugins]# vi xmms/src/libmp4.c
/*
 * MP4/AAC decoder for xmms
 *
 * OPTIONNAL need
 * --------------
 * libid3 (3.8.x - www.id3.org)
*/

#include <pthread.h>
#include <gtk/gtk.h>
#include <stdio.h>
#include <string.h>

#include "neaacdec.h"
#include "mp4ff.h"

#define MP4_DESCRIPTION "MP4 & MPEG2/4-AAC audio player - 1.2.x"
#define MP4_VERSION     "ver. 0.5-faad2-version - 22 August 2004"
#define MP4_ABOUT       "Written by ciberfred"
#define BUFFER_SIZE     FAAD_MIN_STREAMSIZE*64

static void     mp4_init(void);
static void     mp4_about(void);
static void     mp4_play(char *);
static void     mp4_stop(void);
"xmms/src/libmp4.c" [dos] 574L, 15762C 已写?br>[root@TServer plugins]# ls
in_mp4  Makefile.am  mpeg4ip  QCD  QCDMp4  xmms
[root@TServer plugins]# grep -lr BMP *
xmms/src/Makefile.am
[root@TServer plugins]# vi xmms/src/Makefile.am
if HAVE_BMP
libdir=$(shell pkg-config --variable=input-plugin-dir bmp)
local_CFLAGS=$(shell pkg-config --cflags bmp)
local_LDFLAGS=$(shell pkg-config --libs bmp)
else
local_CFLAGS=`$(XMMS_CONFIG) --cflags` -Wall
local_LDFLAGS=`$(XMMS_CONFIG) --libs`
libdir = `$(XMMS_CONFIG) --input-plugin-dir`
endif #HAVE_BMP
lib_LTLIBRARIES = libmp4.la

libmp4_la_CFLAGS = $(local_CFLAGS) -Wall \
       -I$(top_srcdir)/include -I$(top_srcdir)/common/mp4ff

libmp4_la_LIBADD = $(top_builddir)/libfaad/libfaad.la \
       $(top_builddir)/common/mp4ff/libmp4ff.la

libmp4_la_LDFLAGS = -module -avoid-version $(local_LDFLAGS) -lpthread

libmp4_la_SOURCES = libmp4.c mp4_utils.c aac_utils.c
~
~
"xmms/src/Makefile.am" [dos] 11L, 373C 已写?br>[root@TServer plugins]# cd ..
[root@TServer faad2]# grep -lr BMP *
configure.in
[root@TServer faad2]# vi configure.in
  AM_CONDITIONAL([HAVE_BMP], true)
fi

if test x$WITHDRM = xyes; then
  AC_DEFINE(DRM, 1, [Define if you want to use libfaad together with Digital Radio Mondiale (DRM)])
  AC_DEFINE(DRM_PS, 1, [Define if you want support for Digital Radio Mondiale (DRM) parametric stereo])
fi

AC_CONFIG_FILES(libfaad/Makefile)
AC_CONFIG_FILES(common/Makefile)
AC_CONFIG_FILES(common/mp4ff/Makefile)
AC_CONFIG_FILES(plugins/Makefile)
AC_CONFIG_FILES(plugins/xmms/Makefile)
AC_CONFIG_FILES(plugins/xmms/src/Makefile)
AC_CONFIG_FILES(plugins/mpeg4ip/Makefile)
AC_CONFIG_FILES(faad2.spec)
AC_CONFIG_FILES(frontend/Makefile)
AC_CONFIG_FILES(Makefile)
已查扑ֈ文gl尾Q再从开头l查?br>AC_PROG_MAKE_SET
AC_CHECK_PROGS(RPMBUILD, rpmbuild, rpm)

AM_CONFIG_HEADER(config.h)

AC_ARG_WITH(xmms,[  --with-xmms             compile XMMS-1 plugin],
             WITHXMMS=$withval, WITHXMMS=no)


AC_ARG_WITH(drm,[  --with-drm              compile libfaad with DRM support],
             WITHDRM=$withval, WITHDRM=no)

AC_ARG_WITH(mpeg4ip, [  --with-mpeg4ip          compile mpeg4ip plugin],
                     WITHMPEG4IP=$withval, WITHMPEG4IP=no)

dnl Checks for header files required for mp4.h
AC_HEADER_STDC
AC_CHECK_HEADERS(stdint.h inttypes.h)
AC_CHECK_HEADERS(mathf.h)
AC_CHECK_HEADERS(float.h)
/BMP                                                        
  fi

  AM_CONDITIONAL(HAVE_XMMS, true)
else
 AC_MSG_NOTICE(no xmms build configured)
 AM_CONDITIONAL(HAVE_XMMS, false)
fi

if test x$WITHDRM = xyes; then
  AC_DEFINE(DRM, 1, [Define if you want to use libfaad together with Digital Radio Mondiale (DRM)])
  AC_DEFINE(DRM_PS, 1, [Define if you want support for Digital Radio Mondiale (DRM) parametric stereo])
fi
AC_CONFIG_FILES(libfaad/Makefile)AC_CONFIG_FILES(common/Makefile)AC_CONFIG_FILES(common/mp4ff/Makefile)AC_CONFIG_FILES(plugins/Makefile)
AC_CONFIG_FILES(plugins/xmms/Makefile)
"configure.in" [dos] 131L, 3776C 已写?br>[root@TServer faad2]# grep -lr BMP *
[root@TServer faad2]# ls
aacDECdrop  common        faad2.spec.in    libfaad      README
AUTHORS     configure.in  frontend         Makefile.am  README.linux
bootstrap   COPYING       include          NEWS         TODO
ChangeLog   docs          in_mpeg4aac.nsi  plugins
[root@TServer faad2]# autoreconf -vir
/usr/bin/autoreconf: unrecognized option `-r'
Try `/usr/bin/autoreconf --help' for more information.
[root@TServer faad2]# autoreconf -vif
autoreconf: Entering directory `.'
autoreconf: configure.in: not using Gettext
autoreconf: running: aclocal --force
autoreconf: configure.in: tracing
autoreconf: running: libtoolize --copy --force
autoreconf: running: /usr/bin/autoconf --force
autoreconf: running: /usr/bin/autoheader --force
autoreconf: running: automake --add-missing --copy --force-missing
configure.in: installing `./install-sh'
configure.in: installing `./missing'
common/mp4ff/Makefile.am: installing `./compile'
common/mp4ff/Makefile.am: installing `./depcomp'
Makefile.am: installing `./INSTALL'
autoreconf: Leaving directory `.'

cd faad2
autoreconf -vif
./configure --prefix=/usr --with-mp4v2 --enable-shared
make
make install

////////////////faac的编译\\\\\\\\\\\\\\\\\\\\\\\\

cd faac
faac-1.25Q有两个地方需要修改,一是m4 macro文gQ另外一个是需要对文g的格式及权限作一下处?
错误现象 1Q?br>[root@TServer faac]# autoreconf -vif
autoreconf: Entering directory `.'
autoreconf: configure.in: not using Gettext
autoreconf: running: aclocal --force
configure.in:10: warning: underquoted definition of MY_DEFINE
  run info '(automake)Extending aclocal'
  or see http://sources.redhat.com/automake/automake.html#Extending-aclocal
autoreconf: configure.in: tracing
autoreconf: running: libtoolize --copy --force
configure.in:10: warning: underquoted definition of MY_DEFINE
  run info '(automake)Extending aclocal'
  or see http://sources.redhat.com/automake/automake.html#Extending-aclocal
autoreconf: running: /usr/bin/autoconf --force
autoreconf: running: /usr/bin/autoheader --force
autoreconf: running: automake --add-missing --copy --force-missing
autoreconf: Leaving directory `.'
[root@TServer faac]# grep MY_DEFINE *
configure.in:AC_DEFUN(MY_DEFINE, [ AC_DEFINE($1, 1, [define if needed]) ])
configure.in:AC_CHECK_DECL(strcasecmp, MY_DEFINE(HAVE_STRCASECMP))
configure.in:     MY_DEFINE(HAVE_LIBMP4V2)
configure.in:AC_CHECK_DECL(strchr, MY_DEFINE(HAVE_STRCHR))
configure.in:AC_CHECK_DECL(memcpy, MY_DEFINE(HAVE_MEMCPY))
configure.in:AC_CHECK_DECL(strsep, MY_DEFINE(HAVE_STRSEP))


解决Ҏ1Q?br>[root@TServer faac]# grep MY_DEFINE *
configure.in:AC_DEFUN(MY_DEFINE, [ AC_DEFINE($1, 1, [define if needed]) ])
configure.in:AC_CHECK_DECL(strcasecmp, MY_DEFINE(HAVE_STRCASECMP))
configure.in:     MY_DEFINE(HAVE_LIBMP4V2)
configure.in:AC_CHECK_DECL(strchr, MY_DEFINE(HAVE_STRCHR))
configure.in:AC_CHECK_DECL(memcpy, MY_DEFINE(HAVE_MEMCPY))
configure.in:AC_CHECK_DECL(strsep, MY_DEFINE(HAVE_STRSEP))

把configure.in文g中的AC_DEFUN(MY_DEFINE, [ AC_DEFINE($1, 1, [define if needed]) ])
修改?AC_DEFUN([MY_DEFINE], [ AC_DEFINE($1, 1, [define if needed]) ])
然后可以autoreconf -ivf了?/p>

错误现象2Q?br>./configure的时候,会出C下错误:
configure: creating ./config.status
config.status: creating common/Makefile
config.status: creating common/mp4v2/Makefile
config.status: creating \
.infig.status: error: cannot find input file: \


q个问题是文件的格式问题造成的,可以用一下方法处理:
[root@TServer faac]#find . -type f | xargs dos2unix

[root@TServer faac]#chmod * 777 -R

处理之后Q就可以安装了?br> 
chmod +x bootstrap
./bootstrap
./configure --prefix=/usr --with-mp4v2 --enable-shared
make
make install

7.支持3gp格式Q这也是现在好多手机支持的格式,所以也得支持编?/p>

~译的时候加?-enable-amr_nb --enable-amr_wb参数pQ根据编译系l的提示Q所以我们得下蝲一

些编?gp所需得文件?br>先在ffmpeg-0.4.9-p20051120/libavcoder/Z个目?br>mkdir -p amr
mkdir -p amr_float
mkdir -p amrwb_float

下蝲http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26073-530_ANSI_C_source_code.zip
解压以后把里面的文g都拷贝到libavcodec/amr

下蝲http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-530_ANSI-C_source_code.zip
解压以后把里面的文g都拷贝到libavcodec/amrwb_float

下蝲http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-540_ANSI_C_source_code.zip
解压以后把里面的文g都拷贝到libavcodec/amr_float

修改libavcodec/amr/makefile 扑ֈCFLAGS = -Wall -pedantic-errors -I. $(CFLAGS_$(MODE)) -D$(VAD) 换成CFLAGS = -Wall -I. $(CFLAGS_$(MODE)) -D$(VAD) -DMMS_IO


8.~译ffmpeg-0.4.9-p20051120
tar xvf ffmpeg-0.4.9-p20051120.tar
cd ffmpeg-0.4.9-p20051120
./configure --prefix=/usr --enable-gpl --enable-shared --enable-mp3lame --enable-amr_nb --enable-amr_nb-fixed --enable-amr_wb --enable-amr_if2 --enable-libogg --enable-vorbis --enable-xvid --enable-a52 --enable-a52bin --enable-dts --enable-pp --enable-faad --enable-faadbin --enable-faac --enable-x264 --enable-pthreads --disable-ffserver --disable-ffplay --cpu=CPU
make
make install


修正一下,如果上面的configure不行Q在我的机器上得q样Q可能由于版本的关系Q?br>./configure --enable-gpl --enable-nonfree --enable-pthreads --enable-libfaac --enable-libfaad --enable-libmp3lame  --enable-libx264 --enable-libxvid --enable-x11grab --prefix=/usr --enable-shared

补充1Q?br>要是说在当在cpu是x86的情况下Q不能编译过去,如果你真~译不过去,可以试着加上--cpu=CPU

补充2Q?br>当遇到编译ffmpeg出错Ӟ扑ֈvi ffmpeg/libavcodec/x264.c删除x4->params.rc.b_cbr = 1;q一?/p>

到此Q一个ffmpeg~译好了Q不q目前管方的ffmpegq不支持wma9和rmvbQ不q网上有很多解决Ҏ?/p>

ffmpeg的{换参敎ͼ
ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 320x240 -b 128 -r 15 test.3gp


*************************mencoder的编?*******************************

mencoder安装?/p>

1、下载主E序Q?MPlayer-1.0rc1.tar.bz2

2、下载essential-20061022.tar.bz2Q安装:
tar vjxf essential-20061022.tar.bz2
mv essential-20061022 /usr/lib/codes
chmod 644 /usr/lib/codes/*
chown root.root /usr/lib/codes/*

3、下载windows-essential-20061022.zipQ安装:
unzip windows-essential-20061022.zip
mv windows-essential-20061022 /usr/lib/wincodes
chmod 644 /usr/lib/wincodes/*
chown root.root /usr/lib/wincodes/*

4、安装mplayer

tar vjxf MPlayer-1.0rc1.tar.bz2
cd MPlayer-1.0rc1
./configure --prefix=/usr  --with-codecsdir=/usr/lib/codecs/   --language=zh_CN
make
make install
如果你需要用mplayer在linux下播放视频,q需要加?-enable-gui(囑Ş界面)Q不q这样就要安装多很多东西了,q里我们只用它的mencoderQ所?-enable-gui可以省略


mencoder的配|参敎ͼ
./configure --prefix=/usr  --with-codecsdir=/usr/lib/codecs/     --language=zh_CN


mencoder转换参数Q?br>mencoder /var/www/woyo/image.woyo.com/%inputfile% -o /var/www/woyo/image.woyo.com/%outputfile%   -of lavf -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=300:mbd=2:last_pred=3:dia=2:cmp=3:vb_strategy=1 -sws 3 -vf scale=400:300  -ofps 30 -srate 22050 -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames



叶子 2009-08-03 14:30 发表评论
]]>
TR101-290: DVB pȝ量标准http://www.shnenglu.com/elva/archive/2009/06/17/87859.html叶子叶子Wed, 17 Jun 2009 02:24:00 GMThttp://www.shnenglu.com/elva/archive/2009/06/17/87859.htmlhttp://www.shnenglu.com/elva/comments/87859.htmlhttp://www.shnenglu.com/elva/archive/2009/06/17/87859.html#Feedback0http://www.shnenglu.com/elva/comments/commentRss/87859.htmlhttp://www.shnenglu.com/elva/services/trackbacks/87859.htmlTR101-290: DVB pȝ量标准
TR101-290: DVB pȝ量标准。TR 101-290 定义的三个优先Q是码流监测的一主要内宏V通过q三个优先的监,可以验被监测的码是否符合MPEG-2 和DVB标准。这三个优先U都包含许多不同的参数?br>
PSI/SI: 数字电视业务信息,由PSI和SI两部分构成。PSI是MPEG-2规定的,它由PAT、PMT、CAT和NIT 4个表构成Q其中PAT、PMT表最为重要。SI是DVB标准规定的,它由BAT、SDT、EIT、RST、TDT、TOT、ST、SIT和DIT 9个表构成Q其?BAT、SDT、EIT ?TDT 是强制性的。PSI/SI ?#8220;?#8221;?#8220;描述W?#8221;构成。表是PSI/SI 的基本结构,针对特定用途,PSI/SI 中规定了一pd表来实现它;表由变量和描q符l成。描q符提供了更多的描述功能?br>
星? 星昄是矢量示波器昄的数字等价Ş式,它可昄 QAM 信号的同?I)分量和正?Q)分量。符h一个特定调制系l中所传输的最信息成分。对?QAM-64Q一个符号代?6 个位Q在图上l制Z个点?br>
BER位误码率:位误码率是发生误码的位数与传输的MC比?br>
MER:调制误差? MER 接收符?代表调制图案中的一个数字?的实际位|与其理想位|进行比较。当信号质量降低Ӟ接收W号距离理想位置更远QMER 量值将会减?br>
EVM:误差矢量q度, EVM量cM?MERQ但表达形式不同。EVM 表达?RMS 误差矢量q度与最大符号幅度的癑ֈ比倹{信L陷增加时QEVM 会增大Q?MER 则会减小。EVM 是在IQ(同相与正?星图上到的蝲波与其理Z的准位|之间的距离Q是“误差信号矢量”?#8220;最大信号幅?#8221;之比Q表达ؓ RMS 癑ֈ比倹{?br>
RS错误:表示l过Reed SolomonU错Q简URSQ后Q出现错误bit的包??br>
频率偏移:实际中心频率和理Z心频率的偏移?br>
SR偏移:实际W码率和理论W码率的偏移?br>
频道IQ反{:星图IQ向量是否反{?br>ҎDVB最新的TR101290试标准DVB/MPEG-2 TS的试错误指示分ؓ3个等U,
W一{是可正确解码所必须的几个参敎ͼ
W二{是达到同步后可连l工作必ȝ参数和需要周期监的参数Q?br>W三{是依赖于应用的几个参?br>
W一U共 6U错误,包括Q同步丢失错误、同步字节错误、PAT 错误、连l计数错误、PMT错误?PID错误?br>
Q?Q传送码同步丢失:q箋到q箋 5 个正常同步视为同步,q箋到 2 个以上不正确同步则ؓ同步丢失错误。传输流失去同步Q标志着传输q程中会有一部分数据丢失Q直接媄响解码后的画面的质量?br>
Q?Q同步字节错误:同步字节g?0X47。同步字节错误和同步丢失错误的区别在于同步字节错误传输数据仍?188?204 包长Q但同步字头?0X47被其他数字代ѝ这表明传输的部分数据有错误Q严重时会导致解码器解不Z受?br>
Q?QPAT 错误Q标识节目相兌 PAT ?PID ?0x0000QPAT 错误包括标识 PAT ?PID 没有臛_ 0.5 s出现一ơ,或?PID?0x0000 的包中无内容Q或?PID?0x0000 的包的包头中的加密控制段不ؓ 0。PAT 丢失或被加密Q则解码器无法搜索到相应节目QPAT 时Q解码器工作旉延?nbsp;                                                                              
Q?Q连l计数错误:TS包头中的q箋计数器是Z随着每个h相同 PID?TS包的增加而增加,码器定正确的解码顺序。TS包头q箋计数不正,表明当前传输有丢包、包重叠、包序错现象,会导致解码器不能正确解码?br>
Q?QPMT 错误Q节目映表 PMT 标识q指CZl成每\业务的流的位|,及每路业务的节目旉参考(PCRQ字D늚位置。PMT 错误包括标识 PMT ?PID 没有辑ֈ臛_ 0.5 s 出现一ơ,或者所有包含PMT 表的 PID的包的包头中的加密控制段不ؓ 0。PMT 被加密,则解码器无法搜烦到相应节目;PMT 时Q媄响解码器切换节目旉?br>
Q?QPID错误Q检查是否每一?PID都有码流Q没?PID׃能完成该路业务的解码?br>
W二U共 6 U错误,包括Q传输错误、CRC 错误、PCR 间隔错误、PCR 抖动错误、PTS 错误及CAT 错误?nbsp;                                                                
Q?Q传输错误:TS包头中的传送包错误指示?#8220;1”Q表C在相关的传送包中至有 1 个不可纠正的错误位,只有在错误被U正之后Q该位才能被重新|?0。而一旦有传送包错,׃再从错包中得出其他错误指C?br>
Q?QCRC 错误Q在 PSI?SI的各U表中出现@环冗余检码 CRC 出错Q说明这些表中的信息有错Q这时不再从出现错误的表中得出其他错误信?br>
Q?QPCR 间隔错误QPCR 用于恢复接收端解码本地的 27 MHz pȝ旉Q如果在没有特别指明的情况下QPCR 不连l发送时间一ơ超q?100 ms ?PCR 整个发送间隔超q?40 msQ则D接收端时钟抖动或者漂U,影响画面昄旉?br>
Q?QPCR 抖动错误QPCR 的精度必高?500 ns ?PCR 抖动量不得大?#177;500 ns。PCR抖动q大Q会影响到解码时钟抖动甚臛_锁?br>
Q?QPTS错误Q播出时间标?PTS重复发送时间大?70 msQ则对囑փ正确昄产生影响。PTS只有?TS未加扰时方能接收?br>
Q?QCAT 错误QTS 包头中的加密控制D不?0Q但却没有相应的 PID ?0x0001 的条件接收表 CATQ或?PID ?0x0001 的包中发现非 CAT 表。CAT 表将指出授权理信息 EMM包的 PIDq控制接收机的正接Ӟ如果 CAT表不正确Q就不能正确接收?br>

W三U共 10U错误,包括QNIT 错误、SI重复率错误、缓冲器错误、非指定 PID错误、SDT错误、EIT 错误、RST 错误、TDT 错误、空~冲器错误及数据延迟错误?br>
W三{错误q是TS传输的致命错误Q但会媄响一些具体应用的正确实施?br>
NIT 标识错误或传输超Ӟ会导致解码器无法正确昄|络状态信息?br>
SDT 标识错误或传输超Ӟ会导致解码器无法正确昄信道节目的信息?br>
EIT 标识错误或传输超Ӟ会导致解码器无法正确昄每套节目的相x务信息?/span>

叶子 2009-06-17 10:24 发表评论
]]>
[转] MPEG-2码流l构http://www.shnenglu.com/elva/archive/2009/03/05/75653.html叶子叶子Thu, 05 Mar 2009 09:15:00 GMThttp://www.shnenglu.com/elva/archive/2009/03/05/75653.htmlhttp://www.shnenglu.com/elva/comments/75653.htmlhttp://www.shnenglu.com/elva/archive/2009/03/05/75653.html#Feedback0http://www.shnenglu.com/elva/comments/commentRss/75653.htmlhttp://www.shnenglu.com/elva/services/trackbacks/75653.html在PES层,主要是在PES包头信息中加入PTS(昄旉标签)和DTSQ解码时间标{)用于视频、音频同步。而在TS中QTS包头加入了PCR(节目旉参?Q用于解码器的系l时钟恢复。在节目PS包头中加入SCR,它的作用与PCR域相伹{?br>    ES是编码视频数据流或音频数据流Q每个ES都由若干个存取单元(AUQ组成,每个视频AU或音频AU都是由头部和~码数据两部分组成,1个AU相当于编码的1q视频图像或1个音频Q也可以_每个AU实际上是~码数据的昄单元Q即相当于解码的1q视频图像或1个音频的取栗?br>    我们知道QMPEG-2对视频的压羃产生I帧、P帧、B帧。把帧顺序I1?P4?B2?B3?P7?B5?B6帧的~码ESQ通过打包q在每个帧中插入PTS/DTS标志Q变成PES。在插入PTS/DTS标志Ӟ׃在B帧PTS和DTS是相{的Q所以无dB帧多插入DTS。而对于I帧和P帧,׃l过复用后数据包的顺序会发生变化Q显C前一定要存储于视频解码器的从新排序缓存器中,l过从新排序后再昄Q所以一定要同时插入PTS和DTS作ؓ从新排序的依据。例如,解码器输入的囑փ帧顺序ؓI1-P4-B2-B3-P7-B5-B6Q但昄时P4一定要在B2、B3之后Q在PST和DTS的指引下Q经q缓存器从新排序Q以从徏视频帧顺序ؓQI1-B2-B3-P4- P7-B5-B6?br>    PES包再打成更小的具固定长度的TS包时在其包头位置加入了PCR和PID(包标?。PID的值是qL定的Q解码器ҎPID把TSQ多节目传输?上不同节目的TS包区分出来,以重建原来的ES。另外,TS的包头包含一?bit的连l计数器Q连l计数器可对PID包传送顺序计敎ͼ据计数器LQ接收端可判断是否有包丢失及包传送顺序错误。所以TS的包头具有同步、识别、检错等功能?nbsp;

叶子 2009-03-05 17:15 发表评论
]]>
[转]MPEG-2视频~码技术O?/title><link>http://www.shnenglu.com/elva/archive/2009/03/05/75652.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Thu, 05 Mar 2009 09:13:00 GMT</pubDate><guid>http://www.shnenglu.com/elva/archive/2009/03/05/75652.html</guid><wfw:comment>http://www.shnenglu.com/elva/comments/75652.html</wfw:comment><comments>http://www.shnenglu.com/elva/archive/2009/03/05/75652.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/elva/comments/commentRss/75652.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/elva/services/trackbacks/75652.html</trackback:ping><description><![CDATA[q年来,电视领域里发生了一pd巨大的变化,会议电视、VCD、数字电视以及高清晰度电?HDTV){新技术和新系l正q速走q我们的生活。与传统的模拟电视相比,q些新系l的H出特点是采用了全数字的囑փ/声音处理技术。随着q些数字电视pȝ的日益成熟和不断发展Q针对不同的应用领域Q一pd相应的数字视频音频编码标准也q速地被制定ƈ不断得到完善Q其中包括: 应用于会议电视及可视电话的H.261Q用于静止图像压~的JPEGQ用于VCD的MPEG-1和用于广播电视、DVD以及HDTV的MPEG-2。与此同Ӟ数字演播室标准及数字电视的质量评h准也被制定出来。与其它几种标准相比QMPEG-2制定的时间稍晚,但却h以下几个H出特点Q所支持的图像分辨率最高,包括W合ITU-RRec.601(CCIR601)格式的标准分辨率的数字电视和更高分L率的HDTV。支持包括高速体育运动在内的zd囑փ。所支持的应用最为广泛,既包括存储媒体中的DVDQ广播电视中的数字广播电视和HDTVQ还可应用于交互式的Ҏ视频(VOD)和准Ҏ视频(NVOD)Q此外,q能够适配于ATMq种新兴的宽带通信|?<br><br>本文着重介l一下MPEG-2的标准组成结构,演播室标准,质量评h标准Q特别是视频压羃技术?<br><br>MPEG?<br>PEG是活动图像专家组(MovingPictureExportsGroup)的羃写,?988q成立。目前MPEG已颁布了两个zd囑փ及声音编码的正式国际标准Q分别称为MPEG-1和MPEG-2?<br><br>MPEG-1标准是:在数字存储介质中实现Ҏ动图像和声音的压~编码,~码码率最高ؓ每秒1.5兆比特,标准的正式规范在ISO/IEC11172中。MPEG-1所支持的输入图像格式是SIF格式。SIF?25/625两种格式Q?52x240x30?52x288x25。MPEG-1是一个开攄Q统一的标准,在商业上获得了巨大的成功。尽其囑փ质量仅相当于VHS视频的质量,q不能满_播的要求,但已q泛应用于VCD{家庭视像品中?<br><br>MPEG-2标准是:针对标准数字电视和高清晰度电视在各种应用下的压羃Ҏ和系l层的详l规定,~码码率从每U?兆比特~100兆比特,标准的正式规范在ISO/IEC13818中。MPEG-2不是MPEG-1的简单升U,MPEG-2在系l和传送方面作了更加详l的规定和进一步的完善。MPEG-2特别适用于广播的数字电视的~码和传送,被认定ؓSDTV和HDTV的编码标准。MPEG-2q专门规定了多\节目的复分接方式。此外,MPEG-2q兼了与ATM信元的适配问题?<br><br>MPEG-2标准 <br>MPEG-2标准目前分ؓ9个部分,l称为ISO/IEC13818国际标准。各部分的内Ҏq如下: <br>一部分QISO/IEC13818-1QSystemQ系l,描述多个视频Q音频和数据基本码流合成传输码流和节目码的方式?<br>二部分-ISO/IEC13818-2QVideoQ视频,描述视频~码Ҏ?<br>三部分-ISO/IEC13818-3QAudioQ音频,描述与MPEG-1音频标准反向兼容的音频编码方法?<br>四部分-ISO/IEC13818-4QComplianceQ符合测试,描述试一个编码码是否符合MPEG-2码流的方法?<br>五部分-ISO/IEC13818-5QSoftwareQYӞ描述了MPEG-2标准的第一、二、三部分的Y件实现方法?<br>六部分-ISO/IEC13818-6QDSM-CCQ数字存储媒?命o与控Ӟ描述交互式多媒体|络中服务器与用户间的会话信令集?<br>上六个部分均已获得通过Q成为正式的国际标准Qƈ在数字电视等领域中得Cq泛的实际应用。此外,MPEG-2标准q有三个部分Q第七部分规定不与MPEG-1音频反向兼容的多通道音频~码Q第八部分现已停止;W九部分规定了传送码的实时接口?<br><br>1990q成立的ATM视频~码专家l与MPEG在ISO/IEC13818标准的第一和第二两个部分进行了合作Q因此上qC个部分也成ؓITU-T?br>标准Q分别ؓQITU-TRec.H.220pȝ和ITU-TRec.H.262视频?<br>下面我们主要讨论一下MPEG视频~码pȝQ即ISO/IEC13818-2部分。MPEG-2视频~码 <br><br> MPEG-2视频~码标准是一个分{的系列,按编码图像的分L率分成四?#8220;U?Levels)”Q按所使用的编码工L集合分成五个“c?Profiles)”?#8220;U?#8221;?#8220;c?#8221;的若q组合构成MPEG-2视频~码标准在某U特定应用下的子集:Ҏ一输入格式的图像,采用特定集合的压~编码工P产生规定速率范围内的~码码流。在20U可能的l合中,目前?1U是已获通过的,UCؓMPEG-2适用炏V?<br>- 我们知道Q当前模拟电视存在着PAL、NTSC和SECAM三大制式q存的问题,因此Q数字电视的输入格式标准试图这三种制式l一hQŞ成一U统一的数字演播室标准Q这个标准就是CCIR601Q现UITU-RRec.BT601标准。MPEG-2中的四个输入囑փ格式“U?#8221;都是Zq个标准的。低U?LowLevel)的输入格式的像素是ITU-RRec.BT601格式?/4Q即352x240x30(代表囑փ帧频为每U?0帧,每囑փ的有效扫描行Cؓ240行,每行的有效像素ؓ352?Q或352x288x25。低U之上的ȝ(MainLevel)的输入图像格式完全符合ITU-RRec.BT601格式Q即720x480x30?20x576x25。主U之上ؓHDTV范围Q基本上为ITU-RRec.BT601格式?倍,其中1440高(High-1440Level)的图像宽高比?:3Q格式ؓ1440x1080x30Q高U?HighLevel)的图像宽高比?6:9Q格式ؓ1920x1080x30?<br><br> 在MPEG-2的五?#8220;c?#8221;中,较高?#8220;c?#8221;意味着采用较多的编码工具集Q对~码囑փq行更精l的处理Q在相同比特率下得到较好的囑փ质量Q当然实现的代h也较大。较高类~码除用较低类的编码工具外Q还使用了一些较低类没有使用的附加工P因此Q较高类的解码器除能解码用本cL法编码的囑փ外,也能解码用较低类Ҏ~码的图像,即MPEG-2?#8220;c?#8221;之间h后向兼容性。简单类(SimpleProfile)使用最的~码工具。主c?MainProfile)除用所有简单类的编码工具外Q还加入了一U双向预的Ҏ。信噪比可分U类(SNRScalableProfile)和空间可分c?SpatiallyScalableProfile)提供了一U多U广播的方式Q将囑փ的编码信息分为基本信息层和一个或多个ơ要信息层。基本信息层包含对图像解码至关重要的信息Q解码器Ҏ基本信息卛_q行解码Q但囑փ的质量较差。次要信息层中包含图像的l节。广播时对基本信息层加以较强的保护,使其h较强的抗q扰能力。这P在距较q,接收条g较好的情况下Q可以同时收到基本信息和ơ要信息Q恢复出高质量的囑փQ而在距离较远Q接收条件较差的条g下,仍能收到基本信息Q恢复出囑փQ不至造成解码中断。高U类(HighProfile)实际上应用于比特率更高,要求更高的图像质量时Q此外,前四个类在处理YQUQV时是逐行序处理色差信号的,高cMq提供同时处理色差信L可能性?<br><br>目前的标准数字电视采用的是MP@MLȝ和主U,而HDTV采用的是MP@HLȝ和高U。下面,我们以MP@MLZ来说明一下MPEG-2视频~码pȝ原理及关键技术?br><br>MPEG-2视频~码pȝ原理及关键技?<br> 概括地说QMPEG-2囑փ压羃的原理是利用了图像中的两U特性:I间相关性和旉相关性。一帧图像内的Q何一个场景都是由若干像素Ҏ成的Q因此一个像素通常与它周围的某些像素在亮度和色度上存在一定的关系Q这U关pd作空间相x;一个节目中的一个情节常常由若干帧连l图像组成的囑փ序列构成Q一个图像序列中前后帧图像间也存在一定的关系Q这U关pd作时间相x。这两种相关性得图像中存在大量的冗余信息。如果我们能这些冗余信息去除,只保留少量非相关信息q行传输Q就可以大大节省传输频带。而接收机利用q些非相关信息,按照一定的解码法Q可以在保证一定的囑փ质量的前提下恢复原始囑փ。一个好的压~编码方案就是能够最大限度地去除囑փ中的冗余信息?<br><br>MPEG-2中编码图像被分ؓ三类Q分别称为I帧,P帧和B帧?<br><br>----I帧图像采用内编码方式,卛_利用了单帧图像内的空间相x,而没有利用时间相x。I帧主要用于接收机的初始化和信道的获取Q以及节目的切换和插入,I帧图像的压羃倍数相对较低。I帧图像是周期性出现在囑փ序列中的Q出现频率可q码器选择?<br><br> P帧和B帧图像采用间编码方式,卛_时利用了I间和时间上的相x。P帧图像只采用前向旉预测Q可以提高压~效率和囑փ质量。P帧图像中可以包含帧内~码的部分,即P帧中的每一个宏块可以是前向预测Q也可以是内编码。B帧图像采用双向时间预,可以大大提高压羃倍数。值得注意的是Q由于B帧图像采用了未来帧作为参考,因此MPEG-2~码码流中图像的传输顺序和昄序是不同的?<br><br>MPEG-2的编码码分为六个层ơ?<br> 从上至下依次为:视频序列?Sequence)Q图像组?GOPQGroupofPicture)Q图像层(Picture)Q像条层(Slice)Q宏块层(MacroBlock)和像块层(Block)。从?中可以看刎ͼ除宏块层和像块层外,上面四层中都有相应的起始?SCQStartCode)Q可用于因误码或其它原因收发两端失步Ӟ解码器重新捕捉同步。因此一ơ失步将臛_丢失一个像条的数据?<br><br> 序列指构成某路节目的囑փ序列Q序列v始码后的序列头中包含了图像尺寸,宽高比,囑փ速率{信息。序列扩展中包含了一些附加数据。ؓ保证能随时进入图像序列,序列头是重复发送的?<br><br> 序列层下是图像组层,一个图像组q互间有预和生成关系的一lI、P、B囑փ构成Q但头一帧图像LI帧。GOP头中包含了时间信息?<br><br> 囑փl层下是囑փ层,分ؓI、P、B三类。PIC头中包含了图像编码的cd和时间参考信息?<br><br> 囑փ层下是像条层Q一个像条包括一定数量的宏块Q其序与扫描顺序一致。MP@ML中一个像条必d同一宏块行内?<br><br> 像条层下是宏块层。MPEG-2中定义了三种宏块l构Q?:2:0宏块4:2:2宏块?:4:4宏块Q分别代表构成一个宏块的亮度像块和色差像块的数量关系?br><br> 4:2:0宏块中包含四个亮度像块,一个Cb色差像块和一个Cr色差像块Q?:2:2宏块中包含四个亮度像块,二个Cb色差像块和二个Cr色差像块Q?:4:4宏块中包含四个亮度像块,四个Cb色差像块和四个Cr色差像块。这三种宏块l构实际上对应于三种亮度和色度的抽样方式?<br><br> 在进行视频编码前Q分量信号R、G、B被变换ؓ亮度信号Y和色差信号Cb、Cr的Ş式?:2:2格式中亮度信L抽样频率?3.5MHzQ两个色差信L抽样频率均ؓ6.75MHzQ这L间的抽样l构中亮度信号ؓ每720x576样|CbQCr都ؓ360x576样|x行中每隔一个像素对色差信号抽一ơ样Q如?所C,○代表Y信号的抽LQ?#215;代表CbQCr信号的抽L?<br><br> 4:4:4格式中,亮度和色差信L抽样频率都是13.5MHzQ因此空间的抽样l构中亮度和色差信号都ؓ每720x576样倹{?:2:0格式中,亮度信号的抽样频?3.5MHzQ空间的抽样l构中亮度信号ؓ每720x576样|CbQCr都ؓ360x288样|x隔一行对两个色差信号抽一ơ样Q每抽样行中每隔一个像素对两个色差信号抽一ơ样?<br><br> 通过上述分析不难计算出,4:2:0格式中,每四个Y信号的像块空间内的CbQCr样值分别构成一个CbQCr像块Q?:2:2格式中,每四个Y信号的像块空间内的CbQCr样值分别构成两个CbQCr像块Q?:4:4格式中,每四个Y信号的像块空间内的CbQCr样值分别构成四个CbQCr像块。相应的宏块l构正是以此基础构成的?br><br> 宏块层之下是像块层,像块是MPEG-2码流的最底层Q是DCT变换的基本单元。MP@ML中一个像块由8x8个抽样值构成,同一像块内的抽样值必d部是Y信号样|或全部是Cb信号样|或全部是Cr信号样倹{另外,像块也用于表C?x8个抽样值经DCT变换后所生成?x8个DCTpL?<br><br>在内编码的情况下,~码囑փ仅经qDCTQ量化器和比Ҏ~码器即生成~码比特,而不l过预测环处理。DCT直接应用于原始的囑փ数据?<br><br> 在间编码的情况下,原始囑փ首先与存储器中的预图像进行比较,计算动矢量,由此q动矢量和参考生成原始囑փ的预图像。而后Q将原始囑փ与预像素差值所生成的差分图像数据进行DCT变换Q再l过量化器和比特编码器生成输出的编码比Ҏ?<br><br> 可见Q内编码与帧间~码程的区别在于是否经q预环的处理?<br>MPEG-2视频压羃Ҏ中包含以下关键技术环节: <br>1、余弦变换DCT <br> DCT是一U空间变换,在MPEG-2中DCT?x8的像块ؓ单位q行Q生成的?x8的DCTpL数据块。DCT变换的最大特Ҏ对于一般的囑փ都能够将像块的能量集中于数低频DCTpL上,即生?x8DCTpL块中Q仅左上角的量低频pL数D大,其余pL的数值很,q样可能只~码和传输少数系数而不严重影响囑փ质量?<br> DCT不能直接对图像生压~作用,但对囑փ的能量具有很好的集中效果Qؓ压羃打下了基?<br><br>2、量化器 <br> 量化是针对DCT变换pLq行的,量化q程是以某个量化步长去除DCTpL。量化步长的大小UCؓ量化_ֺQ量化步长越,量化_ֺpl,包含的信息越多,但所需的传输频带越高。不同的DCT变换pL对hc视觉感应的重要性是不同的,因此~码器根据视觉感应准则,对一?x8的DCT变换块中?4个DCT变换pL采用不同的量化精度,以保证尽可能多地包含特定的DCTI间频率信息Q又佉K化精度不过需要。DCT变换pL中,低频pL对视觉感应的重要性较高,因此分配的量化精度较l;高频pL对视觉感应的重要性较低,分配的量化精度较_,通常情况下,一个DCT变换块中的大多数高频pL量化后都会变为零?<br><br>3、之型扫描与游程~码 <br> DCT变换产生的是一8x8的二l数l,行传输,q须其转换Zl排列方式。有两种二维Cl的转换方式Q或U扫描方式:之型扫描(Zig-Zag)和交替扫描,其中之型扫描是最常用的一U。由于经量化后,大多数非零DCTpL集中?x8二维矩阵的左上角Q即低频分量区,之型扫描后,q些非零DCTpL集中于一l排列数l的前部Q后面跟着长串的量化ؓ零的DCTpLQ这些就为游E编码创造了条g?<br>- 游程~码中,只有非零pL被编码。一个非零系数的~码׃部分l成Q前一部分表示非零pL前的q箋零系数的数量(UCؓ游程)Q后一部分是那个非零系数。这样就把之型扫描的优点体现出来了,因ؓ之型扫描在大多数情况下出现连零的Z比较多,游程~码的效率就比较高。当一l序列中的后部剩余的DCTpL都ؓ零时Q只要用一?#8220;块结?#8221;标志(EOB)来指C,可l束q一8x8变换块的~码Q生的压羃效果是非常明昄?<br><br>4、熵~码 <br> 量化仅生成了DCTpL的一U有效的L表示Q实际传输前Q还d其进行比Ҏ~码Q生用于传输的数字比特。简单的~码Ҏ是采用定长码Q即每个量化g同样数目的比特表C,但这U方法的效率较低。而采用熵~码可以提高~码效率。熵~码是基于编码信Ll计Ҏ,使得q_比特率下降。游E和非零pL既可独立的,也可联合的作늼码。熵~码中用较多的一U是霍夫曼编码,MPEG-2视频压羃pȝ中采用的是霍夫曼编码。霍夫曼~码中,在确定了所有编码信L概率后生产一个码表,对经常发生的大概率信号分配较的比特表示Q对不常发生的小概率信号分配较多的比特表C,使得整个码流的^均长度趋于最短?<br><br>5、信道缓?<br> ׃采用了熵~码Q生的比特的速率是变化的Q随着视频囑փ的统计特性变化。但大多数情况下传输pȝ分配的频带都是恒定的Q因此在~码比特进入信道前需讄信道~存。信道缓存是一~存器,以变比特率从늼码器向里写入数据Q以传输pȝ标称的恒定比特率向外dQ送入信道。缓存器的大,或称定w是设定好的,但编码器的瞬时输出比特率常明N于或低于传输pȝ的频带,q就有可能造成~存器的上溢出或下溢出。因此缓存器d有控制机Ӟ通过反馈控制压羃法Q调整编码器的比特率Q得缓存器的写入数据速率与读出数据速率于q。缓存器对压~算法的控制是通过控制量化器的量化步长实现的,当编码器的瞬时输出速率q高Q缓存器要上溢Ӟ׃量化步长增大以降低编码数据速率Q当然也相应增大了图像的损失Q当~码器的瞬时输出速率q低Q缓存器要下溢出时Q就佉K化步长减以提高~码数据速率?<br><br>6、运动估?<br> q努估计使用于间编码方式时Q通过参考囑փ产生对被压羃囑փ的估计。运动估计的准确E度对间编码的压羃效果非常重要。如果估计作的好Q那么被压羃囑փ与估计图像相减后只留下很的值用于传输。运动估计以宏块为单位进行,计算被压~图像与参考图像的对应位置上的宏块间的位置偏移。这U位|偏UL以运动矢量来描述的,一个运动矢量代表水q_垂直两个方向上的位移。运动估计时QP帧和B帧图像所使用的参考囑փ是不同的。P帧图像用前面最q解码的I帧或P帧作参考图像,UCؓ前向预测Q而B帧图像用两帧图像作为预参考,UCؓ双向预测Q其中一个参考在显C顺序上先于~码?前向预测)Q另一帧在昄序上晚于编码(后向预测)QB帧的参考在Q何情况下都是I帧或P帧?<br><br>7、运动补?<br> 利用q动估计出的运动矢量,参考囑փ中的宏块U至水^和垂直方向上的相对应位置Q即可生成对被压~图像的预测。在l大多数的自然场景中q动都是有序的。因此这U运动补偿生成的预测囑փ与被压羃囑փ的差分值是很小的。数字图像质量的主观评h <br><br> 主观评h的条件包括:评h组l构Q观察距,试囑փQ环境照度和背景色调{。评价小l由一定h数观察h员构成,其中专业人员与非专业人员各占一定比例。观察距Mؓ昄器对角线寸?-6倍。测试图像有若干h一定图像细节和q动的图像序列构成。主观评价反映的是许多h对图像质量统计评Lq_倹{?nbsp;<br>  <img src ="http://www.shnenglu.com/elva/aggbug/75652.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/elva/" target="_blank">叶子</a> 2009-03-05 17:13 <a href="http://www.shnenglu.com/elva/archive/2009/03/05/75652.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MPEG2 TS?http://www.shnenglu.com/elva/archive/2009/03/05/75650.html叶子叶子Thu, 05 Mar 2009 09:04:00 GMThttp://www.shnenglu.com/elva/archive/2009/03/05/75650.htmlhttp://www.shnenglu.com/elva/comments/75650.htmlhttp://www.shnenglu.com/elva/archive/2009/03/05/75650.html#Feedback3http://www.shnenglu.com/elva/comments/commentRss/75650.htmlhttp://www.shnenglu.com/elva/services/trackbacks/75650.html

声明Q以下内容{帖自http://blog.lmtw.com/b/moreframe/archives/2006/40865.htmlQ作者写的非常好Q感谢作者的辛苦?br>

应该说真正了解TSQ还是看了朋友推荐的《数字电视业务信息及其编码》一书之后,MPEG2 TS和数字电视是紧密不可分割的,值得ȝ一下其中的一些关pR?/p>

ISO/IECQ?3818Q?Q系l部分;ISO/IECQ?3818Q?Q视频;ISO/IECQ?3818Q?Q音频;ISO/IECQ?3818Q?Q一致性测试;ISO/IECQ?3818Q?QY仉分;ISO/IECQ?3818Q?Q数字存储媒体命令与控制QISO/IECQ?3818Q?Q高U音频编码;ISO/IECQ?3818Q?Q系l解码实时接口;

MPEG2pȝd包括Q?. 规定以包传输数据的协议;2. 规定收发两端数据同步的协议Q?. 提供多个数据的复用和解复用协议Q?. 提供数据加密的协议。以包Ş式存储和传送数据流是MPEG2pȝ之要炏V?/p>

ES是直接从~码器出来的数据,可以是编码过的视频数据流Q音频数据流Q或其他~码数据的l称。ES经qPES打包器之后,被{换成PES包。PES包由包头和payloadl成Q具体格式摘录如下:


可以看到PTS/DTS是打在PES包里面的Q这两个parameters是解册音频同步昄Q防止解码器输入~存上溢或下溢的关键。PTS表示昄单元出现在系l目标解码器(STD: system target decoder)的时_DTS表示存取单元全部字节从STD的ES解码~存器移走的时刻?span lang=ZH-CN style="FONT-SIZE: 11.5pt; FONT-FAMILY: 宋体">每个I?/span>P?/span>B帧的包头都有一?/span>PTS?/span>DTSQ但PTS?/span>DTS?/span>B帧都是一LQ无L?/span>B帧的DTS。对I帧和P帧,昄前一定要存储于视频解码器的重新排序缓存器中,l过延迟Q重新排序)后再昄Q一定要分别标明PTS?/span>DTS?/span>

上节介绍q,ES首先需打包成PES包Q然后PESҎ需要打包成PS或TS包进行存储或传输。其每\ES只包含一路信源的~码数据,所以每路PES也只包含相对应信源的数据?/p>

对PS而言Q每个PES包头含有PTS和DTSQ流识别码,用于区别不同性质ES。然后通过PS复用器将PES包复用成PS包。实际上是将PES包分解ؓ更细的PS包。在解码的时候,解复用器PS分解成一个个PES包,拆包器然后将PES包拆成视频和音频的ESQ最后输入至各自解码器进行解码。一个问题是Q各个ES在解码时Q如何保证视音频的同步呢Q除了PTS和DTS的配合工作外Q还有一个重要的参数是SCR(system clock reference)。在~码的时候,PTSQDTS和SCR都是由STC(system time clock)生成的,在解码时QSTC会再生,q过锁相环\QPLLQphase lock loopQ,用本地SCR怽与输入的瞬时SCR怽锁相比较Q以定解码q程是否同步Q若不同步,则用q个瞬时SCR调整27MHz的本地时钟频率。最后,PTSQDTS和SCR一起配合,解决视音频同步播攄问题。PS格式摘录如下Q?/p>


PS包的长度比较长且可变Q主要用于无误码环境里,因ؓ长的话Q同步越困难Q且在丢包的情况下,重组也越困难。所以,PS适合于节目信息的~辑和本地内容应用的application?/p>

TS也是由一个或多个PESl合而来的,他们可以h相同的时间基准,也可以不同。其基本的复用思想是,对具有相同时间基?font color=#000000>的多个PES现进行节目复?/font>Q然后再对相互有独立旉基准的各个PSq行传输复用Q最l生出TS?/font>
 
TS包由包头和包数据2部分l成Q其中包头还可以包括扩展的自适用区。包头长度占4bytesQ自使用区和包数据共?84bytesQ整个TS包长度相当于4个ATM包长?span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: ˎ̥">TS包的包头由如下图摘录所C的同步字节、传输误码指C符、有效蝲荷单元v始指C符、传输优先、包识别Q?/span>PID-Packet IdentificationQ、传输加扰控制、自适应区控制和q箋计数?/span>8个部分组成?/span>

 

其中Q可用同步字节位串的自动相关Ҏ,数据流中的包限Ӟ建立包同步;传输误码指示W,是指有不能消除误码时Q采用误码校正解码器可表C?/span>1bit 的误码,但无法校正;有效载荷单元起始指示W,表示该数据包是否存在定的v始信息;传输优先Q是l?/span>TS包分配优先权Q?/span>PID值是qL定的Q解码器ҎPID?/span>TS上从不同ES来的TS包区别出来,以重建原来的ESQ传输加扰控Ӟ可指C数据包内容是否加扰Q但包头和自适应区永q不加扰Q自适应区控Ӟ?/span>2 bit表示有否自适应区,卻I01Q表C有有用信息无自适应区,Q?/span>10Q表C无有用信息有自适应区,Q?/span>11Q表C有有用信息有自适应区,Q?/span>00Q无定义Q连l计数器可对PID包传送顺序计敎ͼ据计数器LQ接收端可判断是否有包丢失及包传送顺序错误。显Ӟ包头?/span>TS包具有同步、识别、检错及加密功能?/span>

    TS包自适应区由自适应区长、各U标志指C符、与插入标志有关的信息和填充数据4部分l成。其中标志部分由间断指示W、随机存取指C符?/span>ES优化指示W?/span>PCR标志、接Ҏ志、传输专用数据标志、原?/span>PCR标志、自适应区扩展标?/span>8个部分组成。重要的是标志部分的PCR字段Q可l编解码器的27MHz旉提供同步资料Q进行同步。其q程是,通过PLLQ用解码时本地用PCR怽与输入的瞬时PCR怽锁相比较Q确定解码过E是否同步,若不同步Q则用这个瞬?/span>PCR调整旉频率。因为,数字囑փ采用了复杂而不同的压羃~码法Q造成每幅囑փ的数据各不相同,使直接从压羃~码囑փ数据的开始部分获取时钟信息成Z可能。ؓ此,选择了某些(而非全部Q?/span>TS包的自适应区来传送定时信息。于是,被选中?/span>TS包的自适应区,可用于测定包信息的控?/span>bit和重要的控制信息。自适应区无M随每个包都发送,发送多主要由选中?/span>TS包的传输专用时标参数军_。标志中的随机存取指C符和接Ҏ志,在节目变动时Qؓ随机q入I帧压~的数据提供随入点Q也为插入当地节目提供方ѝ自适应Z的填充数据是׃PES包长不可能正好{?/span>TS包的整数倍,最后的TS包保留一部分有用容量,通过填充字节加以填补Q这样可以防止缓存器下溢Q保持ȝ率恒定不变?/span>

前面3节ȝ了MPEG2 TS的基本格式,其中包括PESQPS和TSQ以及相兛_D늚介绍。那么作ZU传输流QTS内容进行打?复用Q让其媒体内容变成TS传输Qƈ最l在解码端解码。简单来看,TS是一个传输层的协议栈Q它可以承蝲各种内容的传输,比如MPEGQWMVQH264Q甚xIPQ那么其中的传输规范是如何定义的呢?q个xPSIQ节目特定信息)要做的事情?/font>

PSI由四张表构成QPATQPMTQCAT和NITQ这四张表分别描qC一个TS所包括的所有ES的传输l构。首先的一个概忉|QTS是以包Ş式传播,在编解码端都需要以一定的包ID来标识TS里承蝲的内容,比如QPAT表会存在于一个或多个TS包里Q所以要用一个特别的包ID来表C,另外Q不同的ES也需要不同的包ID来标识。我们有了PAT和PMTq两U表Q解码器可以根据PIDQ将TS上从不同ES来的TS包区分出来进行解码?/font>

TS的解码分两步q行Q其一Q是从PID?span class=566290807-13102006>0的TS包里Q解析出PAT表,然后从PAT表里扑ֈ各个节目源的PIDQ一般此c节目源都由若干个ES组成,q描q在PMT表里面,然后通过节目源的PIDQ就可以在PMT表里索到各个ES的PID。其二,解码器根据PMT表里的ES的PIDQ将TS上的包q行区分Qƈ按不同的ES进行解码。所以,TS是经q节目复用和传输复用两层完成的,卛_节目复用Ӟ加入了PMTQ在传输复用Ӟ加入了PAT。同样在节目解复用时Q可以得到PMTQ在传输解复用时Q可以得到PAT。下囑־好地概述了其思想?/span>

TS是支持多路复用的Q所以它可用来传输经复用后的多层节目。在复用q程中,要注意的是,解码q程中所需要面对的旉参考和同步问题Q因复用是需要各U信息同步进行的Q所以在复用q程中,需要插入相关的旉信息QPTSQDTSQPCR?/p>

在TS形成q程中,PTS和DTS是在ES打包成PESӞҎSTC的参考,其旉信息注入PES包中的,而之后在PES切成TSӞ再将PID和PCR信息注入到TS包中Q当多\TS再进行复用的时候,各\TS的PCR会被提取出来,再进行分析,然后再根据统一的STC参考,新的PCR生成q注入到TS中去Q最后,因ؓ原来PAT表信息不在适用Q所以新的PAT表需要再生成Qƈ附加到新的TS中厅R经q这多层的复用之后,新的TS即可以q入调制Q传输阶Dc过E可参见下图Q?/p>


解码q程要面对的问题是:解复用,视音频的同步Q解码缓存器无上下溢。解复用xTS在同一信道里不同时序进行传输的节目分离出来Q视音频同步由DTS, PTS和PCR三者协调完成,q且PCR是重建系l时间基准的l对时标Q而DTS和PTS是解码和重现时刻的相Ҏ标;对解码缓存器无上下溢的问题,必须借助于系l目标解码器QSTDQ模型来对其q行实现Q基本思想如下Q?/p>

  1. TS进入解码器后,首先由换向器Q按照一定的时序关系Q将各种ES分解出来(其中也包括PSI信息)?
  2. 分解q后的ES会q入各自的传输缓存器Q通过之后Q其PES进入各自的d储器Q注意的是:PSI信息会q入pȝ~存器,最后也到达d储器?
  3. 最后,解码器根据DTS信息Q从各个d储器分别提取媒体或系l信息,q行解码QƈҎPTS信息Q将媒体内容q行昄处理?/li>

其过E可参见下图Q?/p>


 原文地址 http://blog.lmtw.com/b/moreframe/archives/2006/40865.html

叶子 2009-03-05 17:04 发表评论
]]>
ProCoder 3不能正常启动的原?/title><link>http://www.shnenglu.com/elva/archive/2009/02/20/74449.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Fri, 20 Feb 2009 11:57:00 GMT</pubDate><guid>http://www.shnenglu.com/elva/archive/2009/02/20/74449.html</guid><wfw:comment>http://www.shnenglu.com/elva/comments/74449.html</wfw:comment><comments>http://www.shnenglu.com/elva/archive/2009/02/20/74449.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/elva/comments/commentRss/74449.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/elva/services/trackbacks/74449.html</trackback:ping><description><![CDATA[<br> <table style="TABLE-LAYOUT: fixed"> <tbody> <tr> <td> <div id="sysm2y2" class=cnt id=blog_text> <p>有的|友安装ProCoder 3后,可以启动Q可以正怋用,有的|友安装ProCoder 3后,不能启动Q无法用。究竟ؓ什么会出现两种不同的情况呢Q经q几天对ProCoder 3多次q行安装卸蝲、卸载安装的试验Q终于找C产生问题的原因:与安装EDIUS4Q?.5?.51Q后采用的破解方法有直接关系?/p> <p>EDIUS4Q?.5?.51Q的破解Ҏ有两U:W一U方法是q行Canopus.Edius.4.xcrack.exe解除30天的使用限制Q第二种Ҏ是将1.5KB的pavedius.dllQ?006-8-15 16:26Q复制到windows\system32中覆盖原文g解除30天的使用限制?/p> <p>采用W一U方法破解后Q?windows\system32中pavedius.dll的大ؓ48KBQ在q种情况下安装ProCoder 3后,windows\system32中pavedius.dll的大仍?8KBQProCoder 3没有破解Q所以不能启动,要想让ProCoder 3启动Q就必须?.5KB的pavedius.dllQ?006-8-15 16:26Q复制到windows\system32中覆盖原文g才行。如果你安装EDIUS4Q?.5?.51Q后采用了第一U破解方法,那么你安装ProCoder 3后就会遇到麻烦,启动不v来。本人就属于q种情况?/p> <p>采用W二U方法破解后Qwindows\system32中的pavedius.dll?.5KBQ在q种情况下安装ProCoder 3后,windows\system32中pavedius.dll的大变?.5KBQProCoder 3已被破解Q所以安装后可启动使用。如果你安装EDIUS4Q?.5?.51Q后采用了第二种破解ҎQ那么你幸q了Q安装上ProCoder 3后就能用?/p> <p>ProCoder 3与pavedius.dll关系密切, ProCoder 3安装后,当windows\system32中或ProCoder 3的安装目录中的pavedius.dll?.5KB?.5KBӞProCoder 3可以启动Q正怋用。当windows\system32或ProCoder 3安装目录中的pavedius.dll?8KB?6KBӞProCoder 3׃能启动,无法使用。而ProCoder 2同pavedius.dll的关pMProCoder 3却有所不同。当windows\system32中的pavedius.dll?8KB?6KBӞ你就别想安装上ProCoder 2Q会提示盘I间不无法安装。必dpavedius.dll删除Q或pavedius.dll替换?.5KB?.5KB后才能安装。ProCoder 2安装上以后,windows\system32中有无pavedius.dll以及pavedius.dll的大都不媄响它正常使用?/p> <p>ProCoder 3与ProCoder 2可以共存?br>在电脑中没有安装qEDIUS、或windows\system32中没有pavedius.dll的情况下Q?ProCoder 3安装后肯定可以正怋用。这?windows\system32中的pavedius.dll?.5KB(007-3-27 0:00)Q是由安?ProCoder 3生成的?/p> <br>作者连?http://hi.baidu.com/home027/blog/item/9ec62bfaf1ad90d9b58f31b0.html<br></div> </td> </tr> </tbody> </table> <img src ="http://www.shnenglu.com/elva/aggbug/74449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/elva/" target="_blank">叶子</a> 2009-02-20 19:57 <a href="http://www.shnenglu.com/elva/archive/2009/02/20/74449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>_解PSI-SIQ一Q?http://www.shnenglu.com/elva/archive/2008/11/12/66733.html叶子叶子Wed, 12 Nov 2008 09:51:00 GMThttp://www.shnenglu.com/elva/archive/2008/11/12/66733.htmlhttp://www.shnenglu.com/elva/comments/66733.htmlhttp://www.shnenglu.com/elva/archive/2008/11/12/66733.html#Feedback1http://www.shnenglu.com/elva/comments/commentRss/66733.htmlhttp://www.shnenglu.com/elva/services/trackbacks/66733.html

Packet的概?/p>

 (1)TS是ZPacket的位格?每个包是188字节或?04字节(一般是188字节,204字节的格式仅仅是?88字节的Packet后部加上16字节的CRC数据,其他格式是一L),整个TS组成如下所C?    

  Packet     Packet    ......    Packet n

在实际用中,因ؓTS已l内部具有很强的错误处理能力,所以一般用较多的?88字节一个包的格?204字节一个包的格式据说一般在高清节目中用较?

 所有的Packet格式都是l一?包括一个Packet header和Packet datas.其中Packet header包含了同步字?该字节固定是0x47,表示q个包的数据开始是正确?,该Packet的唯一L(即PID)和其他一些信?格式如下(用C格式表示)

typedef struct

{

 unsigned sync_byte:8;

 unsigned transport_error_indicator:1;

 unsigned payload_unit_start_indicator:1;

 unsigned transport_priority:1;

 unsigned PID:13;

 unsigned transport_scrambling_control:2;

 unsigned adaptation_field_control:2;

 unsigned continuity_counter:4;

}PACKET_HEADER;

以上l构刚好占用32 bits,?个字?因此一个TS的Packet头部?字节是header信息,分析该header信息可以知道当前Packet的属?u>.剩下?/u>184字节有可能是Video数据,也有可能是Audio数据,也有可能是DVB SI信息,?nbsp;么区分呢?其实很简?是利用header中的PID信息.上一章说了PAT是节目关联表,它的PID?x0000.q个PID是对应q里 header的PID.换句话就是说,如果我们发现一个Packet的PID{于0x0000,那么说明q个Packet是DVB的PAT表格而不?nbsp;Video数据或者Audio数据.

?nbsp;际上,在信L码成TS码流的时?不同节目的Video,Audio{数据都分配了不同的PID.例如,一个节目有两\Video,三\Audio,?nbsp;么分配PID的时候可能是Video 1==0x100,Video 2==0x101,Audio 1==0x102,Audio 2==0x103, Audio 3==0x104,q样传输的TS码流中的PID可能有以上的PID.因此,如果我们需要在E序中过滤出W一路Video和第二\ Audio可以这样处理了(伪代码描q?:

 void Process_Packet(unsigned char*buff)

 {

  int PID=GETPID(buff);

  if(PID==0x100) 

  {

   SaveToVideoBuffer(buff+4);

  }

  else if(PID==0x103)

  {

   SaveToAudioBuffer(buff+4);

  }

  else

  {

   printf("unknown PID!"n");

    

 }

?nbsp;在的问题?~码的时候分配好的PID,在解码的时候是怎么知道什么PID对应什么数据呢?q就是DVB SI表格的分析与处理?请参考第三章.q里?nbsp;看一个实际的TS码流的例?q里的数据是用UltraEdit?6q制格式打开TS码流文g得到?文g是Taiwan-551.ts.

q?nbsp;里仅仅截取了3个Packet的信?h意图中用U色标注的部?q就是TSPacket?个字节的头信?q个TS是采用每个包共188字节?nbsp;格式,因ؓ两个头信息的间隔?88个字?W一?x47到第二个0x47的间?.以后的所有的Packet都将?88字节的格?q是 DVB TS标准规定的固定大?那么q三个包分别包含的是什么数?下面我们可以自己分析一?

 ?nbsp;看第一个包,头信息数据是"0x47 0x07 0xe5 0x12",刚才已经知道?header信息都是按位操作?q就是ؓ什么TS码流也可以叫 做位的原因),特别要注意的是定义和传输的时候都是MSB first,也就是说,先出现的位是数据的最高位.先{化成2q制格式:

 01000111 00000111 11100101 00010010

请对照上面的PACKET_HEADERl构:

typedef struct

{

 unsigned sync_byte:8;

 unsigned transport_error_indicator:1;

 unsigned payload_unit_start_indicator:1;

 unsigned transport_priority:1;

 unsigned PID:13;

 unsigned transport_scrambling_control:2;

 unsigned adaptation_field_control:2;

 unsigned continuity_counter:4;

}PACKET_HEADER;

那么对照一?我们可以发现:

 sync_byte=01000111,是0x47,q是DVB TS规定的同步字?固定?x47.

 transport_error_indicator=0,表示当前包没有发生传输错?

 payload_unit_start_indicator=0,含义请参考ISO13818-1标准文档

 transport_priority=0,表示当前包是低优先.

 PID=00111 11100101?x07e5,q代表是什么呢,暂时q不知道(实际上是Video PID,参考下?

 transport_scrambling_control=00,表示节目没有加密

 adaptation_field_control=01?x01,具体含义请参考ISO13818-1

 continuity_counte=0010?x02,表示当前传送的相同cd的包是第3?/p>

依此cL,再看一下第二个?0x47 0x07 0xe5 0x13",2q制?1000111 00000111 11100101 00010011

 sync_byte=01000111,是0x47,q是DVB TS规定的同步字?固定?x47.

 transport_error_indicator=0,表示当前包没有发生传输错?

 payload_unit_start_indicator=0,含义请参考ISO13818-1标准文档

 transport_priority=0,表示当前包是低优先.

 PID=00111 11100101?x07e5,q代表是什么呢,暂时q不知道(实际上是Video PID,参考下?

 transport_scrambling_control=00,表示节目没有加密

 adaptation_field_control=01?x01,具体含义请参考ISO13818-1

 continuity_counte=0011?x03,表示当前传送的相同cd的包是第4?注意C?以上两个包的PID都是0x07e5,所以这里的continuity_counte递增一?

W三个包?0x47 0x07 0xf1 0x18",2q制?1000111 00000111 11110001 00011000.

 sync_byte=01000111,是0x47,q是DVB TS规定的同步字?固定?x47.

 transport_error_indicator=0,表示当前包没有发生传输错?

 payload_unit_start_indicator=0,含义请参考ISO13818-1标准文档

 transport_priority=0,表示当前包是低优先.

 PID=00111 11100101?x07f1,q代表是什么呢,暂时q不知道(实际上是Audio PID,参考下?

 transport_scrambling_control=00,表示节目没有加密

 adaptation_field_control=01?x01,具体含义请参考ISO13818-1

 continuity_counte=1000?x08,表示当前传送的相同cd的包是第9?/p>

L解码E序<<Seekfor MPEG-2 decoder>>d该文件的l果:

 

上图我们可以发现,Taiwan-551.ts有一个节目叫"DIMO",它的Video PID?x07e5,Audio PID?x07e6

q有一个节目叫"Service 1",没有Video PID,它的Audio PID?x07f1(说明是一个广播节目而非电视节目)

q个数据刚好和我们刚才的分析是吻合的.

?nbsp;是我惛_家还有疑?Z?x07e5代表Video PID,0x07e6代表其中一个Audio PID?q就是刚才提到的,q是TS在~码?nbsp;时候就分配好了?但是,在解码的时候是怎么知道0x07e5׃表的是Video而不是Audio?



叶子 2008-11-12 17:51 发表评论
]]>_解PSI-SIQ二Q?http://www.shnenglu.com/elva/archive/2008/11/12/66734.html叶子叶子Wed, 12 Nov 2008 09:51:00 GMThttp://www.shnenglu.com/elva/archive/2008/11/12/66734.htmlhttp://www.shnenglu.com/elva/comments/66734.htmlhttp://www.shnenglu.com/elva/archive/2008/11/12/66734.html#Feedback0http://www.shnenglu.com/elva/comments/commentRss/66734.htmlhttp://www.shnenglu.com/elva/services/trackbacks/66734.html

DVB SI/PSI分析和处?/p>

 

SI是Specific Information的简U?PSI是program Specific InformationQ该机制允许Q)Q传送各U各L讯息Q比如节目名Uͼ电视台名Uͼ各种Q;Q,U有信息Q甚臛_独传送数据实现数据通信{.q些功能的实现都归功于SI/PSI.

 在DVB 标准中,定义了一个标准的PID用来实现SI/PSI.q些PID是系l保留的Q因此DQӞ~码的时候ƈ不会用这些PQD做ؓVideo PID或?nbsp;Audio PID或者其他PQDQ在一个简单的解复用程序中Q只需要提供处理PAT,PMT表格的程序即可实现解复用Q当然如果需要更友好的界面和实现 更复杂的功能Q如QAQ则必须处理其他的SQ表Q在q里仅仅分析PAT,PMT,SDT表格Q其他SI表格的分析,请参考ISO13818-1(MPEG-2pȝ层标?和EN300468(DVB SI标准)文档Q?/p>

 DVB定义的SI保留的PID分别?

  

上表格的PID是Q)Q保留的Q;Q,分配的其他PQD一定不会占用这些PQDQ解复用E序需要用到的表格只有PAT,PMT,SDT,而EQ应用还需要用CAT,EPG应用q需要用NIT,EIT,TDT,TOT{表?所以在需要解复用的时候,伪代码需要这样写:

  void Process_Packet(unsigned char*buff)

  {

   int PID=GETPID(buff);

   if(PID==0x0000) 

   {

    Process_PAT(buff+4);

   }

   else if(PID==......)

   {

   }

   else

   {

    printf("Unknown PID!");

   }

  }

 所 有的表格都开始于Packet中的184字节的数据部分,但有的时候一个表格没?84字节Q这时在Packet中就可能插入一些无效信息用来填充整个 Packet依然保持?88字节Q也可能用头信息中的payload_unit_start_indicator标志表格有个偏移位置Q当 payload_unit_start_indicator=0表示表格数据直接从Packet区的W四个字节开始,否则表示有一个偏U量位置开?具体 请参考ISO13818-1,W?字节到偏U量间的数据是系l填充的无效数据Q.

 下面针对解复用程序详l分析一下PAT,PMT和SDT三类表格的格式.

PAT, Program Association Table,节目兌?/p>

 PAT表携带以下信?

(1) TSテQ?-- transport_stream_id,该テQ标志唯一的流QD

(2) 节目频道?- program_number,该号码标志TQx中的一个频道,该频道可以包含很多的节目(卛_以包含多个Video PID和Audio PID)

(3) PMT的PID--- program_map_PID,表示本频道用的哪个PID做ؓPMT的PQDQ因为可以有很多的频道,因此Q)Q规定PMT的PID可以q戯己定义.

PAT表定义如?

 

各字D含义如?

 table_id:8 bits,标志本表格的cdQ应该是0x00

 section_syntax_indicator:1 bit,D语法标志,应该?1'

 '0':固定?0'Q这是ؓ了防止和ISO13818Video格式中的控制字冲突而设|的Q?/p>

 Reserved:保留?bits,保留位一般都?0'

 section_length:12bits的段大小Q单位是Bytes.

 transport_stream_id:16bits的当前流QDQDQӞ内唯一.(事实上很多都是自定义的TS ID)

 version_number:5bits版本LQ标注当前节目的版本Q这是个非常有用的参敎ͼ当检到q个字段改变Ӟ说明Q_中的节目已l变化了Q程序必重新搜索节目.

 current_next_indicator:1bit:当前q是未来使用标志W?一般情况下?0'

 section_number:8bits当前D号?/p>

 last_section_number:8bits最后段L(section_number和last_section_number的功能是当PAT内容>184字节ӞPAT表会分成多个D?sections),解复用程序必d全部接收完成后再q行PAT的分?

 从for()开始,是描述了当前流中的频道数目(N),每一个频道对应的PMT PID是什么.解复用程序需要和上图cM的@环来接收所有的频道L和对应的PMT PID,q把q些信息在缓冲区中保存v来.在后部的处理中需要用到PMT PID.

 CRC_32:本段的CRC校验|一般是会忽略的QN是一个变量,计算Ҏ是N=(section_length-9)/4.

 从以上分析我们可以发?PAT表主要包含频道号码和每一个频道对应的PMT的PIDL,q些信息我们在处理PAT表格的时候会保存h,以后会用到q些数据.例如我们可以定义q样的数据结构保存这些信?

 typedef struct

 {

  int channel_number;

  int pmt_pid;

 }PMT_ITEM;

 PMT_ITEM pmt[64];

PMT, Program Map Table,节目影射?/p>

 如果一个TS中含有多个频道,那么׃包含多个PID不同的PMT?是否PMT的伪代码如下:

 void Process_Packet(unsigned char*buff)

 {

  int I;

  int PID=GETPID(buff);

  if(PID==0x0000)

  {

   Process_PAT(buff+4);

  }

  else if(PID==.....)

  {

  }

  else

  {

   

   for(i=0;i<64;i++)

   {

    if(PID==pmt[i].pmt_pid)

    {

     Process_PMT(buff+4);

     break;

    

   }

  }

 }

PMT表中包含的数据如?

(1) 当前频道中包含的所有Video数据的PID

(2) 当前频道中包含的所有Audio数据的PID

(3) 和当前频道关联在一L其他数据的PID(如数字广?数据通讯{用的PID)

PMT定义如下:

 

各字D含义如?

 table_id:8bits的ID,应该?x02

 section_syntax_indicator:1bit的段语法标志,应该?1'

 '0':固定?0',如果不是说明数据有错.

 reserved:2bits保留?应该?00'

 section_length:16bitsD长?从program_number开?到CRC_32(包含)的字节L.

 program_number:16bits的频道号?表示当前的PMT兌到的频道.换句话就是说,当前描述的是program_number频道的信?

 reserved:2bits保留?应该?00'

 version_number:版本L,如果PMT内容有更?则version_number会递增1通知解复用程序需要重新接收节目信?否则version_number是固定不变的.

 current_next_indicator:当前未来标志W?一般是0

 section_number:当前D号?/p>

 last_section_number:最后段L,含义和PAT中的对应字段相同,请参考PAT部分.

 reserved:3bits保留?一般是'000'.

 PCR_PID:13bits的PCR PID,具体请参考ISO13818-1,解复用程序不使用该参?

reserved:4bits保留?一般是'0000'

program_info_length:节目信息长度(之后的是N个描q符l构,一般可以忽略掉,q个字段׃表描q符ȝ长度,单位是Bytes)

紧接着是频道内部包含的节目类型和对应的PIDL?

stream_type:8bits类?标志是Videoq是Audioq是其他数据.

reserved:3 bits保留?

elementary_PID:13bits对应的数据PIDL(如果stream_type是Video,那么q个PID是Video PID,如果stream_type标志是Audio,那么q个PID是Audio PID)

reserved:4 bits保留?

ES_info_length:和program_info_lengthcM的信息长?其后是N2个描q符?

CRC_32:32bitsD|是本段的CRC校验?一般忽?

从以上的分析可以看出,只要我们处理了PMT,那么我们可以获取频道中所有的PID信息,例如当前频道包含多少个Video,共多个Audio,和其他数?q能知道每种数据对应的PID分别是什?

q样如果我们要选择其中一个Video和Audio收看,那么只需要把要收看的节目的Video PID和Audio PID保存h,在处理Packet的时候进行过滤即可实?

比较全面实现解复用的伪代码如?

int Video_PID=0x07e5,Audio_PID=0x07e6;

void Process_Packet(unsigned char*buff)

{

 int I;

 int PID=GETPID(buff);

 if(PID==0x0000)

 {

  Process_PAT(buff+4);

 }

 else if(PID==Video_PID)

 {

  SaveToVideoBuffer(buff+4);

 }

 else if(PID==Audio_PID)

 {

  SaveToAudioBuffer(buff+4);

 }

 else

{

 for( i=0;i<64;i++)

 {

  if(PID==pmt[i].pmt_pid)

  {

   Process_PMT(buff+4);

   Break;

  }

 }

 

}

以上伪代码可以实现基本的解复?所有的频道,所有stream的PID,选择特定的节目进行播?只要d每个Packet?88字节的内?然后每次都调用Process_Packet()卛_实现单的解复?

介绍到这?我们可以ȝ一下DVB搜台的原理了.(?zx?)

  ?nbsp;盒先调整高频头C个固定的频率(?98MHZ),如果此频率有数字信号,则COFDM芯片(如MT352)会自动把TS数据传送给MPEG- decoder. MPEG-2 decoder先进行数据的同步,也就是等待完整的Packet的到?然后循环查找是否出现PID== 0x0000的Packet,如果出现?则马上进入分析PAT的处?获取了所有的PMT的PID.接着循环查找是否出现PMT,如果发现?则自动进 入PMT分析,获取该频D|有的频道数据q保?如果没有发现PAT或者没有发现PMT,说明该频D|有信?q入下一个频率扫?

  从以上描q可以看?机顶盒搜索频率是随机发生?要每次机顶盒都能搜索到信号,则要求TS每隔一D|间就发送一ơPAT和PMT.事实上DVB传输pȝ是q么做的.因此无论何时接入l端pȝ,pȝ都能马上搜烦到节目ƈ正确解复用实现播?不仅仅如?其他数据也都是交替传送的.比如W一个Packet可能是PAT,W二个Packet可能是PMT,而第三个Packet可能是Video 1,W四个Packet可能是Video 2,

只要pȝ传输速度_?是UC?码率"的东?,实现实时播放是没有Q何问题的.

 到这里虽然实C解复?但可以看?使用的PID都是枯燥的数?如果调台要用戯p入数字那可是太麻烦了,而且q容易输入错?操作非常不直?即做成一个菜单让用户选择也是非常的呆?针对q个问题,DVBpȝ提出了一个SDT表格,该表格标志一个节目的名称,q且能和PMT中的PID联系h,q样用户可以通过直接选择节目名称来选择节目?

SDT, Service description section,服务描述D?/p>

 SDT可以提供的信息包?

(1) 该节目是否在播放?/p>

(2) 该节目是否被加密

(3) 该节目的名称

SDT定义如下:

 

各字D定义如?

 table_id:8bits的ID,可以?x42,表示描述的是当前的信息,也可以是0x46,表示是其他流的信?EPG使用此参?

 section_syntax_indicator:D语法标?一般是'1'

 reserved_future_used:2bits保留未来使用

 reserved:1bit保留?防止控制字冲H?一般是'0',也有可能?1'

 section_length:12bits的段长度,单位是Bytes,从transport_stream_id开?到CRC_32l束(包含)

 transport_stream_id:16bits当前描述的流ID

 reserved:2bits保留?/p>

 version_number:5bits的版本号?如果数据更新则此字段递增1

 current_next_indicator:当前未来标志,一般是'0',表示当前马上使用.

 original_netword_id:16bits的原始网lID?/p>

 reserved_future_use:8bits保留未来使用?/p>

 接下来是N个节目信息的循环:

  service_id:16 bits的服务器ID,实际上就是PMTD中的program_number.

  reserved_future_used:6bits保留未来使用?/p>

  EIT_schedule_flag:1bit的EIT信息,1表示当前实C该节目的EIT传?/p>

  EIT_present_following_flag:1bits的EIT信息,1表示当前实C该节目的EIT传?/p>

  running_status:3bits的运行状态信?1-q未播放 2-几分钟后马上开?3-被暂停播?4-正在播放,其他---保留

  free_CA_mode:1bits的加密信?'1'表示该节目被加密.

  ?nbsp;接着的是描述W?一般是Service descriptor,分析此描q符可以获取servive_id指定的节目的节目名称.具体格式请参?nbsp;EN300468中的Service descriptor部分.分析完毕,则节目名U和节目L已经联系h?机顶盒程序就可以用这些节目名UC?nbsp;PID让用户选择,从而实现比较友好的用户界面!

 下面参考一?lt;<Seekfor MPEG2 decoder>>中的界面和显CZ?

 

?nbsp;图是<<Seekfor MPEG2 decoder>>打开三个不同的码文?*.ts)形成的PID信息和节目名U?用户 可以通过切换节目名称的下拉列表框切换节目,也可以通过"视频??音频?下拉列表框切换Video和Audio!q些数据都是通过分析PAT, PMT和SDT得到?



叶子 2008-11-12 17:51 发表评论
]]> ޾Ʒһþ| þþþþƷĻ| ĻhdþþƷ| Ʒþþþþ| þĻԴվ| þۺϺݺۺϾþü | ƷëƬþþþþþ| ˳ŷþ| ĻþþƷ | ھƷþþþӰԺ| 69Ʒþþþ99| þùƷ-Ʒ| þ777߿ۿƷ| ƷѾþþþþþ| 99þ99þ| 99þù޸ۿ2024| ŷһƷþ| ƷѾþþþӰԺ| þþþޱٸ| ƬҹƬþ | þۺϳDž| þˬˬav| ޹˾þۺһ77 | 츾޾þĻ| þþþavר| 91þþƷһ| þþƷһ| 91þþƷƵ| ľƷþþþ| ɫۺϾþþþþþþ| ҰĻþ| 99þˬ޾ƷŮ| ŷҹƷþþþþ˳| 㽶þþþþúݺɫ| ޹Ʒþþ| 99þۺϹƷ| ƷþþĻһ| ھƷۺϾþþ40p| þþƷ˹ҹ| ҹƵþþþһ| ƷۺϾþþþþ888ѿ|