您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > ts流解析指导规则专业资料
实现,传播内容涉及两某些,一是M3U8描述文献,二是TS媒体文献。1、M3U8文献用文本方式对媒体文献进行描述,由一系列标签构成。#EXTM3U#EXT-X-TARGETDURATION:5#EXTINF:5,./0.ts#EXTINF:5,./1.ts#EXTM3U:每个M3U8文献第一行必要是这个tag。#EXT-X-TARGETDURATION:指定最大媒体段时间长度(秒),#EXTINF中指定期间长度必要不大于或等于这个最大值。该值只能浮现一次。#EXTINF:描述单个媒体文献长度。背面为媒体文献,如./0.ts2、ts文献ts文献为传播流文献,视频编码重要格式h264/mpeg4,音频为acc/MP3。ts文献分为三层:ts层TransportStream、pes层PacketElementalStream、es层ElementaryStream.es层就是音视频数据,pes层是在音视频数据上加了时间戳等对数据帧阐明信息,ts层就是在pes层加入数据流辨认和传播必要信息HLS,HttpLiveStreaming是由Apple公司定义用于实时流传播合同,HLS基于HTTP合同sync_byte8b同步字节,固定为0x47transport_error_indicator1b传播错误批示符,表白在ts头adapt域后由一种无用字节,普通都为0,这个字节算在adapt域长度内负载单元起始标示符,一种完整数据包开始时标记为payload_unit_start_indicator1b1transport_priority1b传播优先级,0为低优先级,1为高优先级,普通取0注:详解如下(1)ts层ts包大小固定为188字节,ts层分为三个某些:tsheader、adaptationfield、payload。tsheader固定4个字节;adaptationfield也许存在也也许不存在,重要作用是给局限性188字节数据做填充;payload是pes数据。tsheaderts层内容是通过PID值来标记,重要内容涉及:PAT表、PMT表、音频流、视频流。解析ts流要先找到PAT表,只要找到PAT就可以找到PMT,然后就可以找到音视频流了。PAT表PID值固定为0。PAT表和PMT表需要定期插入ts流,由于顾客随时也许加入ts流,这个间隔比较小,普通每隔几种视频帧就要加入PAT和PMT。PAT和PMT表是必要,还可以加入其他表如SDT(业务描述表)等,但是hls流只要有PAT和PMT就可以播放了。adaptionPAT表:她重要作用就是指明了PMT表PID值。PMT表:她重要作用就是指明了音视频流PID值。音频流/视频流:承载音视频内容。pid13bpid值transport_scrambling_control2b传播加扰控制,00表达未加密adaptation_field_control2b与否包括自适应区,‘00’保存;‘01’为无自适应域,仅具有效负载;‘10’为仅含自适应域,无有效负载;‘11’为同步带有自适应域和有效负载。continuity_counter4b递增计数器,从0-f,起始值不一定取0,但必要是持续一种ts包里,中间ts包不加。自适应区长度要包括传播错误批示符标记一种字节。pcr是节目时钟参照,pcr、dts、pts都是对同一种系统时钟采样值,pcr是递增,因而可以将其设立为dts值,音频数据不需要pcr。如果没有字段,ipad是可以播放,但vlc无法播放。打包ts流时PAT和PMT表是没有adaptationfield,不够长度直接补0xff即可。视频流和音频流都需要加adaptationfield,普通加在一种帧第一种ts包和最后adaptation_field_length1B自适应域长度,背面字节数flag1B取0x50表达包括PCR或0x40表达不包括PCRPCR5BProgramClockReference,节目时钟参照,用于恢复出与编码端一致系统时序时钟STC(SystemTimeClock)。stuffing_bytesxB填充字节,取值0xffPAT格式table_id8bPAT表固定为0x00section_syntax_indicator1b固定为1zero1b固定为0reserved2b固定为11section_length12b背面数据长度transport_stream_id16b传播流ID,固定为0x0001reserved2b固定为11version_number5b版本号,固定为00000,如果PAT有变化则版本号加1固定为1,表达这个PAT表可以用,如果为0则要等待current_next_indicator1bprogram_number节目号为0x0000时表达这是NIT,节目号为0x0001时,16b表达这是PMTreserved3b固定为111PID13b节目号相应内容PID值结束循环CRC3232b前面数据CRC32校验码PMT格式table_id8bPMT表取值随意,0x02section_syntax_indicator1b固定为1zero1b固定为0reserved2b固定为11section_length12b背面数据长度program_number16b频道号码,表达当前PMT关联到频道,取值0x0001reserved2b固定为11version_number5b版本号,固定为00000,如果PAT有变化则版本号加1current_next_indicator1b固定为1section_number8b固定为0x00下一种PAT表section_number8b固定为0x00last_section_number8b固定为0x00开始循环last_section_number8b固定为0x00reserved3b固定为111PCR_PID13bPCR(节目参照时钟)所在TS分组PID,指定为视频PIDreserved4b固定为1111program_info_length12b节目描述信息,指定为0x000表达没有开始循环stream_type8b流类型,标志是Video还是Audio还是其她数据,h.264编码相应0x1b,aac编码相应0x0f,mp3编码相应0x03reserved3b固定为111elementary_PID13b与stream_type相应PIDreserved4b固定为1111ES_info_length12b描述信息,指定为0x000表达没有结束循环CRC3232b前面数据CRC32校验码(2)pes层pes层是在每一种视频/音频帧上加入了时间戳等信息,pes包内容诸多,咱们只留下最惯用。pesstartcode3B开始码,固定为0x000001streamid音频取值(0xc0-0xdf),普通为0xc01B视频取值(0xe0-0xef),普通为0xe0pespacketlength2B背面pes数据长度,0表达长度不限制,量即可,pts计算比较复杂,需要在dts基本上加偏移量。音频pes中只有pts(同dts),视频I、P帧两种时间戳都要有,视频B帧只要pts(同dts)。打包pts和dts就需要懂得视频帧类型,但是通过容器格式咱们是无法判断帧类型,必要解析h.264内容才可以获取帧类型。举例阐明:IPBBBP读取顺序:123456点播视频dts算法:pts是显示时间戳、dts是解码时间戳,视频数据两种时间戳都需要,音频数据pts和dts相似,因此只需要pts。有pts和dts两种时间戳是B帧引起,I帧和P帧pts等于dts。如果一种视频没有B帧,则pts永远和dts相似。从文献中顺序读取视频帧,取出帧顺序和dts顺序相似。dts算法比较简朴,初始值+增只有视频数据长度会超过0xffffflag1B普通取值0x80,表达数据不加密、无优先级、备份数据flag1B取值0x80表达只具有pts,取值0xc0表达具有pts和dtspesdatalength1B背面数据长度,取值5或10pts5B33bit值dts5B33bit值dts顺序:123456pts顺序:153246dts=初始值+90000/video_frame_rate,初始值可以随便指定,但是最佳不要取0,video_frame_rate就是帧率,例如23、30。pts和dts是以timescale为单位,1s=90000timescale,一帧就应当是90000/video_frame_rate个timescale。用一帧timescale除以采样频率就可以转换为一帧播放时长点播音频dts算法:dts=初始值+(90000*audio_samples_per_frame)/audio_sample_rate,audio_samples_per_frame这个值与编解码有关,aac取值1024,mp3取值1158,audio_sample_rate是采样率,例如24000、41000。AAC一帧解码出来是每声道1024个sample,也就是说一帧时长为1024/sample_rate秒。因此每一帧时间戳依次0,1024/sample_rate,...,1024*n/sample_rate秒。直播视频dts和pts应当直接用直播数据流中时间,不应当按公式计算。(3)es层es层指就是音视频数据,咱们只简介h.264视频和aac音频。h.264视频:打包h.264数据咱们必要给视频数据加上一种nalu(NetworkAbstractionLayerunit),nalu涉及naluheader和nalutype,naluheader固定为0x00000001(帧开始)或0x000001(帧中)。h.264数据是由slice构成,slice内容涉及:视频、sps、pps等。nalutype决定了背面h.264数据内容。F1bforbidden_zero_bit,h.264规定必要取0NRI2bnal_ref_idc,取值0~3,批示这个nalu重要性,I帧、sps、pps普通取3,P帧普通取2,B帧普通取0Type5b参照下表nal_unit_type阐明012345678910111213~2324~31未使用非IDR图像片,IDR指核心帧片分区A片分区B片分区CIDR图像片,即核心帧补充增强信息单元(SEI)SPS序列参数集PPS图像参数集分解符序列结束码流结束填充保存未使用邻。一种type=9nalu,核心帧slice前必要要加入type=7和type=8nalu,并且是紧一、背景简介之前我做了一种项目,规定写一种TS流解析模块,因而看了ISOIEC13818-1文档,外加诸多人博客来协助理解,来理解TS流格式是个什么东西,收货颇多。因而我觉得是时候发点干货回馈社会了。二,TS流背景简介在简介详细字段,参数这些头疼,烦人东西之前,我觉得有必要先简介下TS流应用背景,有了这个概念,再去进一步学习,将如虎添翼。TS流最典型应用就是咱们平时生活中数字高清电视。咱们看电视码流就是TS封装格式码流,电视码流发送过来后,就会由咱们机顶盒进行解封装,解码,然后传给电视机进行播放。这里就有一种问题,咱们看电视,有诸多频道,节目,相应码流是怎么区别呢?(TIPS,频道和节目关系,红色字体显示内容是最惯用,打包es层数据时pes头和es数据之间要加入例如咱们有央视综合频道,下属CCTV-1~CCTV14这些节目)TS流引入了PAT和PMT两张表格概念来解决这个问题。三,PAT和PMTTS流是以每188字节为一包,咱们可以称为tspacket。这个tspacket有也许是音视频数据,也有也许是表格。举例阐明,TS流包顺序为:PAT,PMT,DATA,DATA,,,,,,PAT,PMT,DATA,DATA,,,,,,每隔一段时间,发送一张PAT表,紧接着发送一张PMT表,接着发送DATA(音视频)数据。那么你也许要
本文标题:ts流解析指导规则专业资料
链接地址:https://www.777doc.com/doc-8761756 .html