一种实现TS流中音视频源替换的方法及装置与流程

文档序号:14953393发布日期:2018-07-17 23:03阅读:222来源:国知局
本发明涉及计算机
技术领域
:,特别涉及一种实现ts流中音视频源替换的方法及装置。
背景技术
::如今,做ts(transportstream,传输流)相关的研发测试,会时常用到对ts流内不同类型的音视频节目的调试与测试,不过通常单个ts流中不会包含各种类型的音视频节目。目前,为能够对不同类型的音视频源的调试与测试,往往需要到广电等运营商录制多个ts流才能满足研发测试的需求。由于还需要到运营商现场录制ts流,可见,现有这种方式不便于实现对不同类型的音视频源的调试与测试。技术实现要素:本发明实施例提供了一种实现ts流中音视频源替换的方法及装置,便于实现对不同类型的音视频源的调试与测试。第一方面,本发明实施例提供了一种实现ts流中音视频源替换的方法,包括:读取ts流,从所述ts流中查找待替换音视频源的信息;将所述待替换音视频源的信息替换为新的音视频源的信息,并形成新的ts流;其中,所述信息,包括:节目时钟参考、音视频类型以及音视频数据的pid值;将所述新的音视频源合成到所述新的ts流中。优选地,所述读取ts流,从所述ts流中查找待替换音视频源的信息,包括:读取所述ts流;从读取的所述ts流中查找pid为0x0000的第一ts包;从所述第一ts包中查找第一业务标识符的值;当查找到的所述第一业务标识符的值与预设所述待替换音视频源对应的标准业务标识符值相同时,根据所述第一业务标识符的值,从所述第一ts包中确定所述待替换音视频源对应的节目映射表的pid值;从所述ts流中查找pid为确定的所述节目映射表的pid值的第二ts包;从所述第二ts包中确定所述待替换音视频源的信息。优选地,在所述读取所述ts流之后,且在所述从查找到的所述第一ts包中查找第一业务标识符之前,进一步包括:从所述ts流中查找pid为0x0011且表标识符的值为0x42的第三ts包;从所述第三ts包中查找第二业务标识符的值;当查找到的所述第二业务标识符的值与所述标准业务标识符值相同时,从所述第三ts包中确定与所述第二业务标识符的值对应的传输流标识符的值;从所述第一ts包中查找传输流标识符的值;当从所述第一ts包中查找到的传输流标识符的值与从所述第三ts包中确定出的传输流标识符的值相同时,执行所述从查找到的所述第一ts包中查找第一业务标识符。优选地,所述读取ts流,从所述ts流中查找待替换音视频源的信息,包括:每一次从所述ts流中读取预设读取量的数据;针对每一次读取的数据,从当前读取的数据中查找所述待替换音视频源的信息,当查找到所述待替换音视频源的信息中的任意一种或多种时,执行所述将所述待替换音视频源的信息替换为新的音视频源的信息;所述将所述待替换音视频源的信息替换为新的音视频源的信息,包括:将从当前读取的数据中查找到的所述待替换音视频源的信息中的任意一种或多种替换为所述新的音视频源的信息中相应的任意一种或多种。第二方面,本发明实施例提供了一种实现ts流中音视频源替换的装置,包括:查找单元、替换单元和合成单元;所述查找单元,用于读取ts流,从所述ts流中查找待替换音视频源的信息;所述替换单元,用于将所述待替换音视频源的信息替换为新的音视频源的信息,并形成新的ts流;其中,所述信息,包括:节目时钟参考、音视频类型以及音视频数据的pid值;所述合成单元,用于将所述新的音视频源合成到所述新的ts流中。优选地,所述查找单元,用于读取所述ts流;从读取的所述ts流中查找pid为0x0000的第一ts包;从所述第一ts包中查找第一业务标识符的值;当查找到的所述第一业务标识符的值与预设所述待替换音视频源对应的标准业务标识符值相同时,根据所述第一业务标识符的值,从所述第一ts包中确定所述待替换音视频源对应的节目映射表的pid值;从所述ts流中查找pid为确定的所述节目映射表的pid值的第二ts包;从所述第二ts包中确定所述待替换音视频源的信息。优选地,进一步包括:判断单元;所述判断单元,用于所述查找单元读取所述ts流之后,且在从查找到的所述第一ts包中查找第一业务标识符之前,从所述ts流中查找pid为0x0011且表标识符的值为0x42的第三ts包;从所述第三ts包中查找第二业务标识符的值;当查找到的所述第二业务标识符的值与所述标准业务标识符值相同时,从所述第三ts包中确定与所述第二业务标识符的值对应的传输流标识符的值;从所述第一ts包中查找传输流标识符的值;当从所述第一ts包中查找到的传输流标识符的值与从所述第三ts包中确定出的传输流标识符的值相同时,执行所述从查找到的所述第一ts包中查找第一业务标识符。优选地,所述查找单元,用于每一次从所述ts流中读取预设读取量的数据;针对每一次读取的数据,从当前读取的数据中查找所述待替换音视频源的信息,当查找到所述待替换音视频源的信息中的任意一种或多种时,触发所述替换单元;所述替换单元,用于将从当前读取的数据中查找到的所述待替换音视频源的信息中的任意一种或多种替换为所述新的音视频源的信息中相应的任意一种或多种。第三方面,本发明实施例提供了一种计算机可读介质,包括计算机执行指令,当存储控制器的处理器执行所述计算机执行指令时,所述存储控制器执行上述任一实施例所述的方法。第四方面,本发明实施例提供了一种存储控制器,包括:处理器、存储器和总线;所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接,当所述存储控制器运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述存储控制器执行上述任一实施例所述的方法。本发明实施例提供了一种实现ts流中音视频源替换的方法及装置,当需要调试或者测试某类型的音视频源时,可首先读取ts流,然后从中查找到待替换音视频源的信息,接下来利用某类型的音视频源(也即新的音视频源)的信息替换查找到的待替换音视频源的信息,这样先形成了替换信息后的新的ts流,然后再将新的音视频源合成到新的ts流中,可见,需要对哪一种类型的音视频源进行测试,便可将该类型的音视频源替换至ts流中,而不用在到运营商进行录制,从而本方案便于实现对不同类型的音视频源的调试与测试。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明一个实施例提供的一种实现ts流中音视频源替换的方法的流程图;图2是本发明另一个实施例提供的一种实现ts流中音视频源替换的方法的流程图;图3是本发明一个实施例提供的一种实现ts流中音视频源替换的装置的结构示意图;图4是本发明另一个实施例提供的一种实现ts流中音视频源替换的装置的结构示意图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。如图1所示,本发明实施例提供了一种实现ts流中音视频源替换的方法,该方法可以包括以下步骤:步骤101:读取ts流,从所述ts流中查找待替换音视频源的信息。步骤102:将所述待替换音视频源的信息替换为新的音视频源的信息,并形成新的ts流;其中,所述信息,包括:节目时钟参考、音视频类型以及音视频数据的pid值。步骤103:将所述新的音视频源合成到所述新的ts流中。本发明实施例提供了一种实现ts流中音视频源替换的方法,当需要调试或者测试某类型的音视频源时,可首先读取ts流,然后从中查找到待替换音视频源的信息,接下来利用某类型的音视频源(也即新的音视频源)的信息替换查找到的待替换音视频源的信息,这样先形成了替换信息后的新的ts流,然后再将新的音视频源合成到新的ts流中,可见,需要对哪一种类型的音视频源进行测试,便可将该类型的音视频源替换至ts流中,而不用在到运营商进行录制,从而本方案便于实现对不同类型的音视频源的调试与测试。在本发明一个实施例中,所述步骤101的具体实施方式,可以包括:读取所述ts流;从读取的所述ts流中查找pid为0x0000的第一ts包;从所述第一ts包中查找第一业务标识符的值;当查找到的所述第一业务标识符的值与预设所述待替换音视频源对应的标准业务标识符值相同时,根据所述第一业务标识符的值,从所述第一ts包中确定所述待替换音视频源对应的节目映射表的pid值;从所述ts流中查找pid为确定的所述节目映射表的pid值的第二ts包;从所述第二ts包中确定所述待替换音视频源的信息。具体的,对ts流中的每个ts包进行检测,以找到pid为0x0000的第一ts包(若干个),这些第一ts包内的数据为节目关联表pat数据,其中,节目关联表pat的结构可如下表1所示。表1根据表1所示的节目关联表pat的结构,从第一ts包中查找第一业务标识符program_number的值,当找到program_number的值与待替换音视频源的标准业务标识符值相同时,则根据表1所示的节目关联表pat的结构查找并记录program_map_pid的值,program_map_pid的值即为待替换音视频源对应的节目映射表pmt的pid值。在记录program_map_pid的值之后,再对ts流中每个ts包进行检测,以找到pid为记录的program_map_pid的值的第二ts包(若干个),这些第二ts包内的数据为待替换音视频源对应的节目映射表pmt数据,其中,节目映射表pmt的结构可如下表2所示。表2替换音视频源,需要替换根据表2所示的节目映射表pmt的结构中的pcr_pid、stream_type以及elementary_pid,其中,pcr_pid是节目时钟参考,当音视频同步方式为pcr同步时,音视频的同步时钟参考值;stream_type为音视频的类型定义;elementary_pid为音视频数据的pid值。值的注意的是,elementary_pid表示的音频或视频的类型要与stream_type对应的类型相同,也即确定的待替换音视频源的信息可包括pcr_pid、音频的stream_type、音频的stream_type、视频的stream_type以及视频的elementary_pid。在本发明一个实施例中,在所述读取所述ts流之后,且在所述从查找到的所述第一ts包中查找第一业务标识符之前,进一步包括:从所述ts流中查找pid为0x0011且表标识符的值为0x42的第三ts包;从所述第三ts包中查找第二业务标识符的值;当查找到的所述第二业务标识符的值与所述标准业务标识符值相同时,从所述第三ts包中确定与所述第二业务标识符的值对应的传输流标识符的值;从所述第一ts包中查找传输流标识符的值;当从所述第一ts包中查找到的传输流标识符的值与从所述第三ts包中确定出的传输流标识符的值相同时,执行所述从查找到的所述第一ts包中查找第一业务标识符。具体的,对ts流中的每个ts包进行检测,查找到pid为0x0011的ts包,然后分析这些ts包的数据,若ts包的表标识符值table_id为0x42,,则说明符合要求的第三ts包(若干个)中的数据为业务描述表sdt数据,根据有线电视ts传输流规范定义,业务描述表sdt的结构可如下表3所示。表3由表3所示的业务描述表sdt的结构,根据第二业务标识符service_id的结构位置,在第三ts包中找到service_id的值,这是因为目前大部分运营商节目都是以第二业务标识符service_id作为节目号,因此,可以确定待替换的音视频源,例如,需要把节目号为1的音视频源替换掉,则找到的第二业务标识符service_id的值应该是1,值得说明的是,当少数运营商以其他id作为节目号时,针对这种情况要先把节目的第二业务标识符service_id找到,比如可以通过机顶盒数据库找到其他id对应的第二业务标识符等方式,此处不再赘述。在第三ts包中找到了service_id的值后,对比是不是待替换音视频源的service_id,也即判断查找到的service_id的值与标准业务标识符值是否相同,如果否,则继续根据表3中for循环中定义的数据位置检测下一个service_id的值,那么当查找到的service_id的值与标准业务标识符值相同时,则再根据表3所示的业务描述表sdt的结构,从第三ts包中查找到对应的传输流标识符transport_stream_id的值,并记录。那么接下来再根据表1所示的节目关联表pat的结构,从第一ts包中找到传输流标识符transport_stream_id的位置,然后将从第一ts包查找到transport_stream_id值与上一步记录下来的transport_stream_id的值比对,当相同时,则执行从第一ts包中查找第一业务标识符的值这一过程。在本发明一个实施例中,所述步骤101的具体实施方式,可包括:每一次从所述ts流中读取预设读取量的数据;针对每一次读取的数据,从当前读取的数据中查找所述待替换音视频源的信息,当查找到所述待替换音视频源的信息中的任意一种或多种时,执行所述步骤102;所述步骤102的具体实施方式,可包括:将从当前读取的数据中查找到的所述待替换音视频源的信息中的任意一种或多种替换为所述新的音视频源的信息中相应的任意一种或多种。为了避免ts流过大而造成内存不足的问题,可分段读取ts流中的数据,例如,ts流的大小为1000m,那么预设读取量可以设置为100m,这样,从ts流的第一个字节开始,首先可读取前100m的数据,假设在这100m中找到了待替换音视频源的节目时钟参考这一种信息,那么接下来可利用新的音视频源的节目时钟参考来替换这100m中的待替换音视频源的节目时钟参考,然后在替换完成后,可按顺序,读取第2个100m的数据,并按照相同的原理进行相应的替换,当对第10次读取ts流中的100m进行完相应的替换后,又将重新形成新的1000m的ts流。另外,ts流中确认ts包时,可根据有线电视ts传输流规范,ts包的标准长度为188字节,且包头第一字节为0x47。因此,从ts流第一个字节开始,分析码流数据,当遇到0x47的数据时,便查找第n*188+1(n不小于10)的数据是否为0x47,若为0x47,则可认为找到了ts包包头,然后根据有线电视ts传输流规范ts包头的定义,找到pid所在的相应的数据位置,计算pid。具体的,pid查找与确定时,根据有线电视ts传输流规范ts包头的定义查找,定义可如下表4所示;表4根据表4所示的包头的定义,表示pid的数据位置为第12-25bit。因此,将此数据位的数据读出来就是pid值。除此之外,查找相同pid的所有ts包时,一个ts包中仅包含188字节的数据,所以ts流在传输过程中分成多个ts包传输,因此,往往一个ts包中包含的数据是不全的,188字节不足以运输一个pid的数据,而且相邻的两个ts包往往pid不相同,这就需要找到下一个运送同样pid数据的ts包,具体方法是,在上述表4所示的ts包头的结构定义中,有一个字段为continuity_counter,此字段是连续计数器,在相同pid的每个ts包中,按照此参数排序。例如,当前的ts包pid为0x0000、continuity_counter为1,那么下一个pid为0x0000的ts包可能与当前ts包隔了多个ts包,但是下一个pid为0x0000的ts包的continuity_counter必定为2。另外,continuity_counter的值增加到15时,则下一个从0开始。下面将详细说明本发明实施例提供的一种实现ts流中音视频源替换的方法,如图2所示,该方法可以包括如下步骤:步骤201:读取ts流。在本发明实施例中,可利用了java的输入流将ts流的数据读取出来。步骤202:从读取的ts流中查找pid为0x0011且表标识符的值为0x42的第三ts包。步骤203:从第三ts包中查找第二业务标识符的值;当查找到的第二业务标识符的值与预设待替换音视频源对应的标准业务标识符值相同时,从第三ts包中确定与第二业务标识符的值对应的传输流标识符的值。步骤204:从ts流中查找pid为0x0000的第一ts包。步骤205:从第一ts包中查找传输流标识符的值;当从第一ts包中查找到的传输流标识符的值与从第三ts包中确定出的传输流标识符的值相同时,执行步骤206。步骤206:从第一ts包中查找第一业务标识符的值;当查找到的第一业务标识符的值与标准业务标识符值相同时,根据第一业务标识符的值,从第一ts包中确定待替换音视频源对应的节目映射表的pid值。步骤207:从ts流中查找pid为确定的节目映射表的pid值的第二ts包。步骤208:从第二ts包中确定待替换音视频源的节目时钟参考、音视频类型以及音视频数据的pid值。步骤209:将待替换音视频源的节目时钟参考、音视频类型以及音视频数据的pid值替换为新的音视频源的节目时钟参考、音视频类型以及音视频数据的pid值,并形成新的ts流。步骤210:将新的音视频源合成到新的ts流中。在本发明实施例中,首先将新的音视频源转化为.ts格式的音视频,具体可使用格式工厂、vlc播放器等音视频转换工具完成转换,然后将转换后的ts流与上述步骤209形成的新的ts流合成,具体合成方法为:在linux系统中,使用tscbrmuxer命令,则可将两个码流复用合成,例如:tscbrmuxerb:100000修改后的ts.tsc:100000新音视频.ts>新ts.ts;而在windows系统下,可以使用copy/b命令,将两个流合成,例如:copy/b修改后的ts.ts+新音视频.ts新ts.ts。如图3所示,本发明实施例提供了一种实现ts流中音视频源替换的装置,包括:查找单元301、替换单元302和合成单元303;所述查找单元301,用于读取ts流,从所述ts流中查找待替换音视频源的信息;所述替换单元302,用于将所述待替换音视频源的信息替换为新的音视频源的信息,并形成新的ts流;其中,所述信息,包括:节目时钟参考、音视频类型以及音视频数据的pid值;所述合成单元303,用于将所述新的音视频源合成到所述新的ts流中。在本发明一个实施例中,所述查找单元,用于读取所述ts流;从读取的所述ts流中查找pid为0x0000的第一ts包;从所述第一ts包中查找第一业务标识符的值;当查找到的所述第一业务标识符的值与预设所述待替换音视频源对应的标准业务标识符值相同时,根据所述第一业务标识符的值,从所述第一ts包中确定所述待替换音视频源对应的节目映射表的pid值;从所述ts流中查找pid为确定的所述节目映射表的pid值的第二ts包;从所述第二ts包中确定所述待替换音视频源的信息。在本发明一个实施例中,如图4所示,可进一步包括:判断单元401;所述判断单元401,用于所述查找单元读取所述ts流之后,且在从查找到的所述第一ts包中查找第一业务标识符之前,从所述ts流中查找pid为0x0011且表标识符的值为0x42的第三ts包;从所述第三ts包中查找第二业务标识符的值;当查找到的所述第二业务标识符的值与所述标准业务标识符值相同时,从所述第三ts包中确定与所述第二业务标识符的值对应的传输流标识符的值;从所述第一ts包中查找传输流标识符的值;当从所述第一ts包中查找到的传输流标识符的值与从所述第三ts包中确定出的传输流标识符的值相同时,执行所述从查找到的所述第一ts包中查找第一业务标识符。在本发明实施例中,所述查找单元,用于每一次从所述ts流中读取预设读取量的数据;针对每一次读取的数据,从当前读取的数据中查找所述待替换音视频源的信息,当查找到所述待替换音视频源的信息中的任意一种或多种时,触发所述替换单元;所述替换单元,用于将从当前读取的数据中查找到的所述待替换音视频源的信息中的任意一种或多种替换为所述新的音视频源的信息中相应的任意一种或多种。上述装置内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。本发明实施例提供了一种计算机可读介质,包括计算机执行指令,当存储控制器的处理器执行所述计算机执行指令时,所述存储控制器执行上述任一实施例所述的实现ts流中音视频源替换的方法。本发明实施例提供了一种存储控制器,包括:处理器、存储器和总线;所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接,当所述存储控制器运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述存储控制器执行上述任一实施例所述的实现ts流中音视频源替换的方法。综上,本发明各个实施例至少具有如下有益效果:1、在本发明实施例中,当需要调试或者测试某类型的音视频源时,可首先读取ts流,然后从中查找到待替换音视频源的信息,接下来利用某类型的音视频源(也即新的音视频源)的信息替换查找到的待替换音视频源的信息,这样先形成了替换信息后的新的ts流,然后再将新的音视频源合成到新的ts流中,可见,需要对哪一种类型的音视频源进行测试,便可将该类型的音视频源替换至ts流中,而不用在到运营商进行录制,从而本方案便于实现对不同类型的音视频源的调试与测试。2、在本发明实施例中,能够实现将pc可以播放的非加扰音视频源与ts流中指定节目的音视频源替换,那么则可以不必协调运营商操作,也不必需要多个ts流,自己需要调试测试哪类的音视频源,就将该类的音视频源替换到ts流中,也不必耗费人力、时间到运营商现场录制ts流,节省了大量时间。3、在本发明实施例中,当ts流过大时,通过对ts流进行分段读取,分段替换,从而能够极大避免内存不足的问题。需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个〃····〃”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质中。最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1