一种多进程控制的音视频同步输出方法

文档序号:7888887阅读:454来源:国知局
专利名称:一种多进程控制的音视频同步输出方法
技术领域
本发明属于数字音视频技术领域,尤其涉及一种多进程控制的音视频同步 输出方法。
背景技术
数字电视领域内 一个非常重要的技术就是音视频的同步输出,由于流行的 视频编码标准都采用混合编码/解码方式,这种编解码方式利用视频帧在时间上 和空间上的冗余度,采取预测、变换、量化和熵编码的编码方式,将视频帧编
码为不同的帧类型帧内预测帧(I帧),单向预测帧(P帧)和双向预测帧(B 帧),这样就导致^L频编码数据在传输和解码过程中时间上的不一致,而且音频 与视频是分开编码和传输的,但是在播放的时候要求要同步输出播放,如果不 采取比较好的控制方法,很容易导致音视频输出不同步的现象。对于解决这种 问题, 一般的方式是采用较大的緩冲区来緩冲编码数据和解码后的图像音频帧, 依靠緩冲区内数据存储队列的浮动来克服这个问题,但是这样的话对于系统的 存储资源消耗非常大,而且对于音^f见频分开控制其解码和输出比较困难,两者 之间割离开来,虽然视频和音频单独都可以正常输出,但是两者的同步很难得 到有效的控制。

发明内容
为了解决以上问题,本发明提供了 一种多进程控制的音视频同步输出方法, 所述方法利用操作系统的消息队列机制以及MPEG-2系统层中规定的PCR (Program Clock Reference,程序参考时钟)和PTS (Presentation Time Stamp, 显示时间戳)等来实现音视频在统一的系统时间下按照PTS对于音视频的规定 来输出,以达到同步输出的目的。
为了实现以上目的,本发明提供了 一种多进程控制的音视频同步输出方法,由一操作系统对音视频传输流进行多进程处理并输出,所述系统包括一环形緩
冲区和一帧緩冲区,所述方法通过以下步骤实现
步骤l、在操作系统下建立五个进程,分别为系统层解复用进程、视频解码 进程、音频解码进程、视频同步输出进程和音频同步输出进程;
步骤2、系统层解复用进程完成对视音频传输流的解复用,然后将传输流数 据拆包成^L频基本流和音频基本流,以及时间信息;4见频基本流和音频基本流 将分别传送给视频解码进程和音频解码进程进行解码,时间信息用于更新本地 系统时钟;
步骤3、音频解码进程和视频解码进程进行解码,并将其时间信息与解码后 的数据存储空间信息一起发送给视频同步输出进程和音频同步输出进程;
步骤4、视频同步输出进程和音频同步输出进程根据解码后的数据的时间信 息与系统时钟相比对后选择符合输出时间的数据进行输出。
以上步骤2所述的4见频ES流和音频ES流根据PID( Program Identification, 节目标识符)过滤得到,并存储在环形緩冲区内。所述的更新本地系统时钟是 通过以下步骤实现的(a)在解复用后的视频ES流和音频ES流中根据PCR的 PID寻找PCR数据;(b)找到PCR数据后,判断本地PCR是否存在,如果不 存在,则将找到的PCR的基准值与扩展值分别存储下来;如果已存在,则根据 存在的PCR数据与系统时间计算当前的PCR数据;(c)比较步骤(b)计算得 到的当前的PCR数据和从步骤(a)获取的PCR数据,当两者之差超过系统规 定的阈值时,就更新本地系统时钟。
进一步的,所述的本地系统时钟值根据时钟定时器中断进行累加,定时器 每10毫秒产生一个中断,每次中断计时值加90,当系统时钟值大于等于PCR 的最大值时,归零重新开始累加计时。
以上步骤3所述的^L频解码进程的实现过程如下(a) ^L频解码进程阻塞 于解复用进程发送给3见频解码进程的消息队列,通过发送的消息队列激活;(b) 根据系统PCR与本地时钟获得当前的解码时间;(c)在视频ES数据环形緩冲 区内根据每个ES数据包的PTS搜索符合解码时间的ES数据,如果找到了符合 解码时间的ES数据,则交给解码器解码;如果找不到则继续阻塞在消息队列上, 直到新的消息携带的数据包符合系统解码时间;(d)解码后得到的视频原始帧 数据存储在帧緩沖区内,该緩冲区地址与该帧携带的PTS数据保存在全局的一见 频PTS数组内,并传递给^L频同步输出进程。
以上步骤3所述的音频解码进程的实现过程如下(a)音频解码进程阻塞于 解复用进程发送给^L频解码进程的消息队列,通过发送的消息队列激活;(b) 根据系统PCR与本地时钟获得当前的解码时间;(c)在音频ES数据环形緩沖 区内根据每个ES数据包的PTS搜索符合解码时间的ES数据,如果找到了符合 解码时间的ES数据,则交给解码器解码;如果找不到则继续阻塞在消息队列上, 直到新的消息携带的数据包符合系统解码时间;(d)解码后得到的音频PCM (Pulse Code Modulation,脉码调制录音)数据存储在帧緩冲区内,该緩冲区地 址与该帧携带的PTS数据保存在全局的视频PTS数组内,并传递给视频同步输 出进程。
进一步的,所述的视频PTS数组或音频PTS数组为环形的数据结构,所述 的环形结构的每一个单位都有一个是否有效的标志,当标志无效时方可以更新 此单位的数据。
进一步的,所述的消息队列应根据其长度判断其是否有溢出现象,如果在 发送过程中消息队列^^使用完毕,则应才艮据;亂频帧类型将P帧或B帧抛弃,并 清空所述帧对应的消息队列。
以上步骤3所述的时间信息为该ES流的PTS,所述的存储空间信息包括解 码后的视频ES流和音频ES流数据的存储起始位置、结束位置和起始码。
以上步骤4所述的视频同步输出进程的输出过程是通过以下步骤实现的 (a)视频同步输出进程阻塞于视频输出事件;(b)由于视频的每一帧输出都产 生一个硬件中断,在视频中断处理程序ISR中发送一帧输出结束事件,通知视 频同步输出进程解除该进程的阻塞;(c)视频同步输出进程在视频PTS全局数 组内查找和当前系统时钟产生的播出时间最接近的一帧的PTS; (d)根据找到 的PTS寻找该帧原始视频数据,并进行输出(e)将存储此帧帧地址与PTS的数 据结构标志为无效。
进一步的,所述的视频同步输出进程的阻塞时间可以根据输出帧率计算得到。
以上步骤4所述的音频同步输出进程的输出过程是通过以下步骤实现的 (a)音频同步输出进程阻塞于采样PCM数据的输出事件;(b)根据音频硬件 输出接口的速率产生硬件中断,在音频中断处理程序ISR中发送一帧输出结束 事件,通知音频输出进程解除该进程的阻塞;(c)音频同步输出进程在音频PTS 全局数组内查找和当前系统时钟产生的播出时间最接近的一帧的PTS; (d)根 据找到的PTS寻找该帧的原始PCM数据,并进行输出;(e)将存储此帧帧地址 与PTS的数据结构标志为无效。
本发明由于采用了上述的技术方案,不仅有效地实现了音视频的同步输出, 而且不需要大容量的緩冲区来緩冲编码数据和解码后的图像音频帧,大大节省 了系统的存储资源,可基于嵌入式操作系统平台开发,实现复杂度低。
具体实施例方式
以下将对本发明的多进程控制的音视频同步输出方法作进一步的详细描述。
本发明多进程控制的音视频同步输出方法是基于美国模拟器件公司的嵌入 式操作系统的DSPBlackfmBF533平台上开发实现的,具体实现步骤如下
步骤l、在操作系统下建立五个进程,分别为系统层解复用进程、视频解码 进程、音频解码进程、视频同步输出进程和音频同步输出进程;
步骤2、系统层解复用进程完成对视音频传输流的解复用,然后将传输流数 据拆包成两部分(一)视频ES (Element Stream,基本流)流和音频ES流, 和(二)时间信息;;现频ES流和音频ES流将分别传送给—见频解码进程和音频 解码进程进行解码,时间信息用于更新本地系统时钟;
步骤3、音频解码进程和视频解码进程进行解码,并将其时间信息与解码后 的数据存储空间信息一起发送给视频同步输出进程和音频同步输出进程;
步骤4、视频同步输出进程和音频同步输出进程根据解码后的数据的时间信 息与系统时钟相比对后选择符合输出时间的数据进行输出。
以上步骤2所述的视频ES流和音频ES流根据PID( Program Identification, 节目标识符)过滤得到,并存储在环形緩沖区内。所述的更新本地系统时钟是 通过以下步骤实现的(a)在解复用后的视频ES流和音频ES流中根据PCR的 PID寻找PCR数据;(b)找到PCR数据后,判断本地PCR是否存在,如果不
存在,则将找到的PCR的基准值与扩展值分别存储下来;如果已存在,则根据 存在的PCR数据与系统时间计算当前的PCR数据;(c)比较步骤(b)计算得 到的当前的PCR数据和从步骤(a)获取的PCR数据,当两者之差超过系统规 定的阈值时,就更新本地系统时钟。
进一步的,所述的本地系统时钟值根据时钟定时器中断进行累加,定时器 每10毫秒产生一个中断,每次中断计时值加90,当系统时钟值大于等于PCR 的最大值时,归零重新开始累加计时,本实施例中PCR的最大值为0xFB0E0500。
以上步骤3所述的视频解码进程的实现过程如下(a)视频解码进程阻塞 于解复用进程发送给:规频解码进程的消息队列,通过发送的消息队列激活;(b) 根据系统PCR与本地时钟获得当前的解码时间;(c)在视频ES数据环形緩冲 区内根据每个ES数据包的PTS搜索符合解码时间的ES数据,如果找到了符合 解码时间的ES数据,则交给解码器解码;如果找不到则继续阻塞在消息队列上, 直到新的消息携带的数据包符合系统解码时间;(d)解码后得到的视频原始帧 数据存储在帧緩冲区内,该緩冲区地址与该帧携带的PTS数据保存在全局的视 频PTS凄t组内,并传递给3见频同步输出进程。
以上步骤3所述的音频解码进程的实现过程如下(a)音频解码进程阻塞于 解复用进程发送给一见频解码进程的消息队列,通过发送的消息队列激活;(b) 根据系统PCR与本地时钟获得当前的解码时间;(c)在音频ES数据环形緩沖 区内根据每个ES数据包的PTS搜索符合解码时间的ES数据,如果找到了符合 解码时间的ES数据,则交给解码器解码;如果找不到则继续阻塞在消息队列上, 直到新的消息携带的数据包符合系统解码时间;(d)解码后得到的音频PCM (Pulse Code Modulation,脉码调制录音)数据存储在帧緩冲区内,该緩冲区地 址与该帧携带的PTS数据保存在全局的视频PTS数组内,并传递给视频同步输 出进程。
进一步的,所述的视频PTS数组或音频PTS数组为环形的数据结构,所述 的环形结构的每一个单位都有一个是否有效的标志,当标志无效时方可以更新 此单位的数据。
进一步的,所述的消息队列应根据其长度判断其是否有溢出现象,如果在 发送过程中消息队列被使用完毕,则应根据视频帧类型将P帧或B帧抛弃,并清空所述帧对应的消息队列。
以上步骤3所述的时间信息为该ES流的PTS,所述的存储空间信息包括解 码后的^L频ES流和音频ES流lt据的存储起始位置、结束位置和起始码。
以上步骤4所述的视频同步输出进程的输出过程是通过以下步骤实现的 (a)视频同步输出进程阻塞于视频输出事件;(b)由于视频的每一帧输出都产 生一个硬件中断,在视频中断处理程序ISR中发送一帧输出结束事件,通知视 频同步输出进程解除该进程的阻塞;(c)视频同步输出进程在视频PTS全局数 组内查找和当前系统时钟产生的播出时间最接近的一帧的PTS; (d)根据找到 的PTS寻找该帧原始视频数据,并进行输出;(e)将存储此帧帧地址与PTS的 数据结构标志为无效。
进一步的,所述的视频同步输出进程的阻塞时间可以根据输出帧率计算得 到,本实施例中釆用PAL制的视频输出,其帧率为29.97帧/秒,可以计算出视频 输出帧时间间隔大概为40ms。
以上步骤4所述的音频同步输出进程的输出过程是通过以下步骤实现的 (a)音频同步输出进程阻塞于采样PCM凄t据的输出事件;(b)才艮据音频硬件 输出接口的速率产生硬件中断,在音频中断处理程序ISR中发送一帧输出结束 事件,通知音频输出进程解除该进程的阻塞;(c)音频同步输出进程在音频PTS 全局数组内查找和当前系统时钟产生的播出时间最接近的一帧的PTS; (d)根 据找到的PTS寻找该帧的原始PCM数据,并进行输出;(e)将存储此帧帧地址 与PTS的数据结构标志为无效。
本发明利用了音视频系统层的基本原理,配合操作系统的消息事件机制, 再利用嵌入式系统硬件的特性完成了视音频同步输出,并在机顶盒的应用中得 到验证,具有软件实现思路清晰,代码复杂度低等优点。
权利要求
1、一种多进程控制的音视频同步输出方法,由一操作系统对音视频传输流进行多进程处理并输出,所述系统包括一环形缓冲区和一帧缓冲区,其特征在于,所述方法通过以下步骤实现步骤1、在操作系统下建立五个进程,分别为系统层解复用进程、视频解码进程、音频解码进程、视频同步输出进程和音频同步输出进程;步骤2、系统层解复用进程完成对视音频传输流的解复用,然后将传输流数据拆包成视频基本流和音频基本流,以及时间信息;视频基本流和音频基本流将分别传送给视频解码进程和音频解码进程进行解码,时间信息用于更新本地系统时钟;步骤3、音频解码进程和视频解码进程进行解码,并将其时间信息与解码后的数据存储空间信息一起发送给视频同步输出进程和音频同步输出进程;步骤4、视频同步输出进程和音频同步输出进程根据解码后的数据的时间信息与系统时钟相比对后选择符合输出时间的数据进行输出。
2、 如权利要求1所述的多进程控制的音视频同步输出方法,其特征在于, 步骤2所述的视频基本流和音频基本流根据节目标识符(PID)过滤得到,并存 储在环形緩冲区内。
3、 如权利要求1所述的多进程控制的音视频同步输出方法,其特征在于, 步骤2所述的更新本地系统时钟是通过以下步骤实现的(a)在解复用后的视 频基本流和音频基本流中根据程序参考时钟PCR的PID寻找PCR数据;(b)找 到PCR数据后,判断本地PCR是否存在,如果不存在,则将找到的PCR的基 准值与扩展值分别存储下来;如果已存在,则根据存在的PCR数据与系统时间 计算当前的PCR数据;(c)比较步骤(b)计算得到的当前的PCR数据和从步 骤(a)获取的PCR数据,当两者之差超过系统规定的阈值时,就更新本地系统 时钟。
4、 如权利要求3所述的多进程控制的音视频同步输出方法,其特征在于, 所述的本地系统时钟值根据时钟定时器中断进行累加,定时器每10毫秒产生一 个中断,每次中断计时值加90,当系统时钟值大于等于PCR的最大值时,归零重新开始累加计时。
5、 如权利要求1所述的多进程控制的音视频同步输出方法,其特征在于, 步骤3所述的视频解码进程的实现过程如下(a)视频解码进程阻塞于解复用 进程发送给视频解码进程的消息队列,通过发送的消息队列激活;(b)根据系 统PCR与本地时钟获得当前的解码时间;(c)在视频基本流数据环形緩冲区内 根据每个基本流数据包的显示时间戳PTS搜索符合解码时间的基本流数据,如 果找到了符合解码时间的基本流数据,则交给解码器解码;如果找不到则继续 阻塞在消息队列上,直到新的消息携带的数据包符合系统解码时间;(d)解码 后得到的视频原始帧数据存储在帧緩冲区内,该緩冲区地址与该帧携带的PTS 数据保存在全局的视频PTS数组内,并传递给视频同步输出进程。
6、 如权利要求1所述的多进程控制的音视频同步输出方法,其特征在于, 步骤3所述的音频解码进程的实现过程如下(a)音频解码进程阻塞于解复用 进程发送给视频解码进程的消息队列,通过发送的消息队列激活;(b)根据系 统PCR与本地时钟获得当前的解码时间;(c)在音频基本流数据环形緩冲区内 根据每个基本流数据包的PTS搜索符合解码时间的基本流数据,如果找到了符 合解码时间的基本流数据,则交给解码器解码;如果找不到则继续阻塞在消息 队列上,直到新的消息携带的数据包符合系统解码时间;(d)解码后得到的音 频脉码调制录音PCM数据存储在帧緩冲区内,该緩沖区地址与该帧携带的PTS 数据保存在全局的视频PTS数组内,并传递给视频同步输出进程。
7、 如权利要求5或6所述的多进程控制的音视频同步输出方法,其特征在 于,所述的视频PTS数组或音频PTS数组为环形的数据结构,所述的环形结构 的每一个单位都有一个是否有效的标志,当标志无效时方可以更新此单位的数据。
8、 如权利要求5或6所述的多进程控制的音视频同步输出方法,其特征在 于,所述的消息队列应根据其长度判断其是否有溢出现象,如果在发送过程中 消息队列被使用完毕,则应根据视频帧类型将单向预测帧或双向预测帧抛弃, 并清空所述帧对应的消息队列。
9、 如权利要求1所述的多进程控制的音视频同步输出方法,其特征在于, 步骤3所述的时间信息为该基本流的PTS,所述的存储空间信息包括解码后的视频基本流和音频基本流数据的存储起始位置、结束位置和起始码。
10、 如权利要求1所述的多进程控制的音视频同步输出方法,其特征在于, 步骤4所述的视频同步输出进程的输出过程是通过以下步骤实现的(a)视频 同步输出进程阻塞于视频输出事件;(b)由于视频的每一帧输出都产生一个硬 件中断,在视频中断处理程序ISR中发送一帧输出结束事件,通知视频同步输 出进程解除该进程的阻塞;(c)视频同步输出进程在视频PTS全局数组内查找 和当前系统时钟产生的播出时间最接近的一帧的PTS; (d)根据找到的PTS寻 找该帧原始视频数据,并进行输出;(e)将存储此帧帧地址与PTS的数据结构 才示志为无岁丈。
11、 如权利要求IO所述的多进程控制的音视频同步输出方法,其特征在于, 所述的视频同步输出进程的阻塞时间可以根据输出帧率计算得到。
12、 如权利要求1所述的多进程控制的音视频同步输出方法,其特征在于, 步骤4所述的音频同步输出进程的输出过程是通过以下步骤实现的(a)音频 同步输出进程阻塞于采样PCM数据的输出事件;(b)才艮据音频硬件输出接口的 速率产生硬件中断,在音频中断处理程序ISR中发送一帧输出结束事件,通知 音频输出进程解除该进程的阻塞;(c)音频同步输出进程在音频PTS全局数组 内查找和当前系统时钟产生的播出时间最接近的一帧的PTS; (d)根据找到的 PTS寻找该帧的原始PCM数据,并进行输出;(e)将存储此帧帧地址与PTS的 数据结构标志为无效。
全文摘要
本发明提供了多进程控制的音视频同步输出方法,所述方法需建立系统层解复用、视频解码、音频解码、视频同步输出和音频同步输出五个进程系统层解复用进程对传输流进行解复用,并拆包成视频/音频基本流和时间信息;视频/音频基本流分别传送给视频/音频解码进程进行解码,时间信息用于更新本地系统时钟;视频/音频解码进程将其时间信息与解码后的数据存储空间信息一起发送给视频/音频同步输出进程;视频/音频同步输出进程根据解码后数据的时间信息与本地系统时钟比较后选择符合输出时间的数据进行输出。所述方法不需要大容量的缓冲区来缓冲编码数据和解码后的图像音视频帧,可节省系统的存储资源;基于嵌入式操作系统开发,实现复杂度低。
文档编号H04N7/52GK101188770SQ20071017241
公开日2008年5月28日 申请日期2007年12月17日 优先权日2007年12月17日
发明者玥 于, 钰 张 申请人:上海广电(集团)有限公司中央研究院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1