ts packet结构分析
2017-10-29 16:19
323 查看
ts packet结构分析
int mpegts_resync(char* buff,u_int32_t usize){ int i=0; char c; for(i = 0;i < 0xffff; i++) { if(usize < i){ return -1; } c = buff[i]; if (c == 0x47 && (vailide_int ==0 || i>=vailide_int-1)) { printf("we have find tsync =%d",i); return i; } } return -1; }
int demux_file( char* buff,u_int32_t pid,u_int32_t totalsize) { char*buf=NULL; u_int64_t pn=0; int n; u_int32_t readsize=0; if(lastleftsize!=0){ vailide_int=buf_len-lastleftsize; readsize=mpegts_resync(buff,totalsize); }else mpegts_resync(buff,totalsize); if(readsize>0 && !demuxer.M2TS &&lastleftsize+readsize==188){ memcpy(tsbuff+lastleftsize,buff,readsize); demux_ts_packet(&demuxer,tsbuff,pid); } if(readsize>0 && !demuxer.M2TS &&lastleftsize+readsize!=188){ int a=0; } if(readsize>0 && demuxer.M2TS && lastleftsize+readsize==192){ memcpy(tsbuff+lastleftsize,buff,readsize); demux_ts_packet(&demuxer,tsbuff,pid); } totalsize=totalsize-readsize; for(pn=1;readsize>=0;pn++) { if(buf_len){ if(totalsize<buf_len) { printf("lastleftsize=%d \n",lastleftsize); lastleftsize=totalsize; memcpy(tsbuff,buff+readsize,lastleftsize); break; } buf=buff+readsize; totalsize=totalsize-buf_len; readsize=readsize+buf_len; } else{ if(totalsize<188){ printf("lastleftsize=%d \n",lastleftsize); lastleftsize=totalsize; memcpy(tsbuff,buff+readsize,lastleftsize); break; } buf=buff+readsize; printf("buff+readsize value=0x%x buf[4]=0x%x \n",buf[0],buf[4]); if(buf[0]==0x47 && buf[4]!=0x47) { buf_len=188; demuxer.M2TS=0; totalsize=totalsize-188; readsize=readsize+188; }else if(buf[0]!=0x47 && buf[4]==0x47) { if(totalsize<192){ lastleftsize=totalsize; memcpy(tsbuff,buff+readsize,lastleftsize); break; } buf=buff+readsize; buf_len=192; demuxer.M2TS=1; totalsize=totalsize-192; readsize=readsize+192; }else { return -1; } } if((n=demux_ts_packet(&demuxer,buf,pid))) { return -1; } } }
void adjust_TS_packet_header(AML_TS_header_t pheader,char*buf) { pheader->transport_error_indicator = buf[1] >> 7; //16; pheader->payload_unit_start_indicator = buf[1] >> 6 & 0x01; pheader->transport_priority = buf[1] >> 5 & 0x01; pheader->PID = (buf[1] & 0x1F) << 8 | buf[2]; pheader->transport_scrambling_control = buf[3] >> 6; pheader->adaption_field_control = buf[3] >> 4 & 0x03; pheader->continuity_counter = buf[3] & 0x0f; }
stream_t get_Stream_pid(demuxer_t demuxer,int pid){ int i; for(i=0;i<=demuxer->index;i++){ streamMap pStreamMap=demuxer->streamsmap[i]; if(pStreamMap.pid==pid){ printf("pStreamMap.pid=%d \n",pStreamMap.pid); break; } else if(i==demuxer->index) { demuxer->index++; demuxer->streamsmap[i].pid=pid; printf("demuxer->index=%d \n",demuxer->index); AML_stream_reset(&demuxer->streamsmap[i].stream); break; } continue; } return &demuxer->streamsmap[i].stream; }
相关文章推荐
- Graph database_neo4j 底层存储结构分析(6)
- 关于React的Container&Presentational Component模型结构分析
- SAP UI5初步结构分析研究(六)
- linux驱动由浅入深系列:高通sensor架构实例分析之二(驱动代码结构)
- lucene索引结构(六)--词位置(.prx)倒排索引文件结构分析
- Android4.2.2 Gallery2源码分析(11)——Gallery的层次结构图
- Solr6 源码结构分析
- [转]linux2.6input子系统中部分相关结构体的分析
- FireMonkey 结构性初略分析
- App工程结构搭建:几种常见Android代码架构分析
- 函数调用时的堆栈结构分析
- 安卓程序基本结构分析
- KVM虚拟机代码揭秘——QEMU代码结构分析
- MD中bitmap源代码分析--数据结构
- Hadoop-datanode存储结构及源码分析<转>
- Eclipse下项目目录结构的一点浅薄分析
- chibi-scheme源代码分析之零--总体结构
- 深入分析ADO.NET中的DataSet对象的结构以及操作方法
- 结构、流体、热分析、多物理场耦合、电磁仿真硬件配置推荐2018
- QT-EMBEDDED图形引擎体系结构源代码分析