适用于数字机顶盒的多媒体播放方法及系统与流程

文档序号:15498363发布日期:2018-09-21 22:07阅读:479来源:国知局

本发明涉及多媒体播放领域,特别涉及数字机顶盒的多媒体播放领域。



背景技术:

多媒体播放器主要功能包括协议解析、音频解码、视频解码、字幕解码、音视频及字幕的显示,多媒体播放器的工作流程大致为:读取多媒体文件获得数据,对数据进行解析把音频、视频以及字幕数据分离,分离后的数据分别送往各自的解码器,解码器从数据中解析出基本码流数据后送往渲染器,渲染器根据基本码流数据的时间标签在正确的时间把音视频以及字幕在显示设备上显示出来。

多媒体包括传统的mkv、avi、flv、wmv、ts等容器格式以及流媒体中的hls、smoothstreaming、mpegdash等协议格式,长期以来数字机顶盒上多媒体播放器的功能严重依耐于机顶盒内部芯片软件开发工具包提供的媒体播放接口实现上述解析解码操作,而各种数字机顶盒不同的芯片平台对多媒体的协议解析功能参差不齐致使现有的数字机顶盒不能支持各种格式多媒体的播放,如此极大的影响了用户的播放体验。



技术实现要素:

本发明所要解决的技术问题是:克服数字机顶盒内芯片平台因多媒体解析能力差异造成不同播放体验的问题,提出一种适用于数字机顶盒的多媒体播放方法及系统。

为解决上述技术问题,本发明的适用于数字机顶盒的多媒体播放方法,包括如下步骤:

步骤一、客户端根据用户选择的播放源确定播放地址并传送播放地址和用户选择的播放控制指令至服务端;

步骤二、服务端根据所述播放地址获取播放文件,根据所述播放控制指令对所述播放文件进行协议解析获得es流(基本码流)及媒体信息并将es流打包为pes流(基本码流包),将pes流和媒体信息传送至客户端;

步骤三、客户端读取pes流和媒体信息,根据媒体信息对pes流进行解码并进行音频和视频的时间同步控制后显示。

为解决客户端与服务端的通讯效率低的问题,作为上述适用于数字机顶盒的多媒体播放方法的改进,所述客户端和服务端之间还设置有共享内存用于客户端和服务端之间数据的传递,所述数据包括播放地址、播放控制指令、pes流和媒体信息,所述pes流包括视频pes流和音频pes流,所述媒体信息包括音频及视频的编码格式、音频及视频的pid(包标识符)值,所述播放文件的时长和解析状态信息。

为了防止数据溢出而致使的显示花屏,作为上述适用于数字机顶盒的多媒体播放方法的改进,所述步骤二中,所述共享内存包括用于存放视频pes流的视频循环缓存、用于存放音频pes流的音频循环缓存和用于存放播放地址、播放控制指令和媒体信息的控制信息缓存,所述服务端轮询视频循环缓存的状态,若服务端写入到视频循环缓存中的视频pes流总量减去被客户端读取的视频pes流总量大于视频循环缓存空间值的五分之三,则服务端暂停向共享内存中写入视频pes流和音频pes流。

为了解决起播后不流畅的问题,作为上述适用于数字机顶盒的多媒体播放方法的改进,所述步骤三中,所述客户端轮询所述共享内存的存储状态,若共享内存中视频pes流超过起播阈值后客户端开始读取pes流。

为了解决音频视频不同步的问题,作为上述适用于数字机顶盒的多媒体播放方法的改进,所述步骤三中,时间同步控制包括如下步骤:获取视频pes流中视频第一帧的pts(显示时间戳)与系统时间戳同步,每隔段时间获取pes流中视频帧的pts与系统时间戳的差值即差值一并获取pes流中音频帧的pts和系统时间戳的差值即差值二,若差值一与差值二的差值大于时间差阈值,则收取下一个音频帧获取该音频帧的pts与系统时间戳的差值即差值三,若差值三小于差值二,则客户端将差值三对应的音频帧进行解码。

为解决所述技术问题,本发明的适用于数字机顶盒的多媒体播放系统,包括服务端和客户端,所述客户端内设置有显示模块、读解析数据模块、解码器和音频视频同步控制模块,所述服务端设置有解析模块和写解析数据模块;

所述显示模块用于获取用户选择的播放源确定播放地址并发送播放地址和用户选择的播放控制指令到服务端,并用于音频视频的输出显示;

所述解析模块用于根据所述播放地址获取播放文件,根据所述播放控制指令对所述播放文件进行协议解析获得es流及媒体信息并将es流打包为pes流;

所述写解析数据模块用于将所述pes流和所述媒体信息传送至客户端;

所述读解析数据模块用于读取所述pes流和所述媒体信息;

所述解码器用于根据媒体信息对所述pes流进行解码得到音频数据和视频数据;

所述音频视频同步控制模块用于控制音频和视频的同步。

为解决客户端与服务端的通讯效率低的问题,作为上述适用于数字机顶盒的多媒体播放系统的改进,所述客户端和服务端之间设置有共享内存模块用于客户端和服务端之间数据的传递,所述显示模块向共享内存模块中写入播放地址和播放控制指令,所述解析模块向共享内存模块中读出播放地址和播放控制指令,所述写解析数据模块向共享内存模块中写入pes流和媒体信息,所述读解析数据模块从共享内存模块中读出pes流和媒体信息,所述pes流包括视频pes流和音频pes流,所述媒体信息包括音频及视频的编码格式、音频及视频的pid值、播放文件的时长和解析状态信息。

为了防止数据溢出而致使的显示花屏,作为上述适用于数字机顶盒的多媒体播放系统的改进,所述共享内存模块包括用于存放视频pes流的视频循环缓存单元、用于存放音频pes流的音频循环缓存单元和用于存放播放地址、播放控制指令和媒体信息的控制信息缓存单元,所述服务端轮询视频循环缓存单元的状态,若写解析数据模块写入到视频循环缓存单元中的视频pes流总量减去读解析数据模块读取的视频pes流总量大于视频循环缓存单元空间值的五分之三,则写解析数据模块暂停向共享内存模块中写入视频pes流和音频pes流。

为了解决起播后不流畅的问题,作为上述适用于数字机顶盒的多媒体播放系统的改进,所述客户端轮询所述共享内存的存储状态,若共享内存中视频pes流的数量超过起播阈值后读解析数据模块开始读取pes流。

为了解决音视频不同步的问题,作为上述适用于数字机顶盒的多媒体播放系统的改进,所述音频视频同步控制模获取视频pes流中视频第一帧的pts与系统时间戳同步,每隔段时间获取pes流中视频帧的pts与系统时间戳的差值即差值一并获取pes流中音频帧的pts和系统时间戳的差值即差值二,若差值一与差值二的差值大于时间差阈值,则收取下一个音频帧获取该音频帧的pts与系统时间戳的差值即差值三,若差值三小于差值二,则将差值三对应的音频帧写入解码器进行解码。

本发明的有益效果是:

1)利用开源软件vlc(多媒体播放器)或ffmpeg(快速的运动图像专家组格式播放器)完成服务端的协议解析功能,仅利用数字机顶盒内部的芯片平台提供的解码器解码独立的音视频pes流,多媒体播放器其余功能均采用软件自行实现,保证了解码效率的同时,取消了多媒体的协议解析对芯片平台的依赖,实现了在不同芯片平台上集成具有统一播放体验的多媒体播放器。

2)采用共享内存实现了客户端与服务端之间进行异步通信交换数据,提高了通信效率。

3)采用循环缓存存储pes数据,提高存储空间利用率,同时通过判断写入到视频循环缓存的视频pes流与从视频循环缓存读出的视频pes流的数据差来决定是否继续向共享内存中写入pes流,避免了数据溢出花屏的问题。

4)当共享内存中pes流超过起播阈值后开始读取pes流使得起播后数据缓存有余量,使得起播后播放更流畅。

5)采用音视频数据与系统时间戳的相对差值,使得音视频时间上得到同步。

附图说明

图1为本发明实施例的适用于数字机顶盒的多媒体播放方法的执行流程图。

图2为本发明实施例的适用于数字机顶盒的多媒体播放系统的逻辑框图。

图3为本发明实施例的读取视频pes流数据量的算法流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例对本发明进行进一步详细说明。

本发明旨在克服数字机顶盒内芯片平台因多媒体解析能力差异造成不同播放体验的问题,提出了一种适用于数字机顶盒的多媒体播放方法及系统。

本发明的适用于数字机顶盒的多媒体播放方法,包括如下步骤:

步骤一、客户端根据用户选择的播放源确定播放地址并传送播放地址和用户选择的播放控制指令至服务端;

步骤二、服务端根据所述播放地址获取播放文件,根据所述播放控制指令对所述播放文件进行协议解析获得es流及媒体信息并将es流打包为pes流,将pes流和媒体信息传送至客户端;

步骤三、客户端读取pes流和媒体信息,根据媒体信息对pes流进行解码并进行音频和视频的时间同步控制后显示。

本发明的适用于数字机顶盒的多媒体播放系统,包括服务端和客户端,所述客户端内设置有显示模块、读解析数据模块、解码器和音频视频同步控制模块,所述服务端设置有解析模块和写解析数据模块;所述显示模块用于获取用户选择的播放源确定播放地址并发送播放地址和用户选择的播放控制指令到服务端,并用于音频视频的输出显示;所述解析模块用于根据所述播放地址获取播放文件,根据所述播放控制指令对所述播放文件进行协议解析获得es流及媒体信息并将es流打包为pes流;所述写解析数据模块用于将所述pes流和所述媒体信息传送至客户端;所述读解析数据模块用于读取所述pes流和所述媒体信息;所述解码器用于根据媒体信息对所述pes流进行解码;所述音频视频同步控制模块用于控制音频和视频的同步。

实施例

本发明可采用开源软件vlc或ffmpeg完成多媒体的协议解析,本实施例中以开源的vlc进行多媒体协议解析进行举例以期详细说明本发明的工作原理。本实施例采用c/s(客户机/服务器)架构模式实现,客户端向服务端发起播放请求传递播放地址和播放控制指令,开启读解析数据模块作为线程并打开数字机顶盒底层芯片的解码器,之后等待共享内存模块中pes流的视频数据量达到起播阈值。vlc进程作为服务器端初始化分配共享内存,并映射本地进程地址,等待多媒体解析请求,vlc进程获取播放地址后开启解析现场进行解析获得音视频流es数据并编码为pes流,同时将获取的媒体信息传回给客户端,另一方面vlc进程开启写解析数据线程将写入分配的共享内存缓存供客户端取用,客户端在获取媒体信息后配置音视频解码器解码格式,读解析数据模块等待共享内存内视频pes流的数据量达到起播阈值后立即开始读取视频pes流数据整块写入对应的解码器缓存进行解码,同时开启音频pes流的读取。

如图1所示,本发明的适用于数字机顶盒的多媒体播放方法,包括如下步骤:

步骤一、客户端根据用户选择的播放源确定播放地址并传送播放地址和用户选择的播放控制指令至服务端,播放控制指令如定点播放,暂停,恢复和快进快退等,其中,为了使客户端与服务端之间进行异步通信交换数据而得以提高通信效率,客户端和服务端之间还设置有共享内存用于客户端和服务端之间数据的传递。

步骤二、服务端通过共享内存获取播放地址和播放控制指令并根据所述播放地址获取播放文件,根据所述播放控制指令对所述播放文件进行协议解析获得es流及媒体信息并对es流进行打包为pes流,将pes流和媒体信息写入共享内存;其中,为了使客户端明确得知音频及视频的编码格式等信息便于解码,所述媒体信息包括音频及视频的编码格式、音频及视频的pid值、播放文件的时长和文件播放到结尾及文件解析出错等解析状态信息。所述pes流包括视频pes流和音频pes流,为了防止数据溢出花屏,所述共享内存包括用于存放视频pes流的视频循环缓存、用于存放音频pes流的音频循环缓存和用于存放播放地址、播放控制指令和媒体信息的控制信息缓存,所述服务端轮询视频循环缓存的状态,若服务端写入到视频循环缓存中的视频pes流总量减去被客户端读取的视频pes流总量大于视频循环缓存空间值的五分之三,则服务端暂停向共享内存中写入视频pes流和音频pes流。

步骤三、客户端读取pes流和媒体信息,根据媒体信息对pes流进行解码并音频和视频的时间同步控制后进行显示。其中,客户端读取pes流的算法将在下文中结合图3进行说明,另外为了解决起播后不流畅的问题,所述客户端轮询所述共享内存的存储状态,若共享内存中视频pes流的数量超过起播阈值后客户端开始读取pes流。为了解决音视频不同步的问题,步骤三中,时间同步控制包括如下步骤:获取视频pes流中视频第一帧的pts与系统时间戳同步,每隔段时间获取pes流中视频帧的pts与系统时间戳的差值即差值一并获取pes流中音频帧的pts和系统时间戳的差值即差值二,若差值一与差值二的差值大于时间差阈值,则收取下一个音频帧获取该音频帧的pts与系统时间戳的差值即差值三,若差值三小于差值二,则客户端将差值三对应的音频帧进行解码。

如图2所示,本发明中适用于数字机顶盒的多媒体播放系统,包括服务端和客户端这两个进程,所述客户端内设置有显示模块、读解析数据模块、解码器和音频视频同步控制模块,所述服务端设置有解析模块和写解析数据模块;

所述显示模块用于获取用户选择的播放源确定播放地址并发送播放地址和用户选择的播放控制指令到服务端,并用于音频视频的输出显示,其中,播放控制指令如定点播放,暂停,恢复和快进快退等,所述解析模块用于根据所述播放地址获取播放文件,根据所述播放控制指令对所述播放文件进行协议解析获得es流及媒体信息并将es流打包为pes流;所述写解析数据模块用于将所述pes流和所述媒体信息传送至客户端;所述读解析数据模块用于读取所述pes流和所述媒体信息;所述解码器用于根据媒体信息对所述pes流进行解码;所述音频视频同步控制模块用于控制音频和视频的同步。

其中,为了使客户端与服务端之间进行异步通信交换数据而得以提高通信效率,客户端和服务端之间还设置有共享内存模块用于客户端和服务端之间数据的传递,所述显示模块向共享内存模块中写入播放地址和播放控制指令,所述解析模块向共享内存模块中读出播放地址和播放控制指令,所述写解析数据模块向共享内存模块中写入pes流和媒体信息,所述读解析数据模块从共享内存模块中读出pes流和媒体信息,所述pes流包括视频pes流和音频pes流,所述媒体信息包括音频及视频的编码格式、音频及视频的pid值、播放文件的时长和解析状态信息。

为了防止数据溢出花屏,所述共享内存模块包括用于存放视频pes流的视频循环缓存单元、用于存放音频pes流的音频循环缓存单元和用于存放播放地址、播放控制指令和媒体信息的控制信息缓存单元,所述服务端轮询视频循环缓存单元的状态,若写解析数据模块写入到视频循环缓存单元中的视频pes流总量减去读解析数据模块读取的视频pes流总量大于视频循环缓存单元空间值的五分之三,则写解析数据模块暂停向共享内存模块中写入视频pes流和音频pes流。

为了解决起播后不流畅的问题,所述客户端轮询所述共享内存的存储状态,若共享内存中视频pes流的数量超过起播阈值后读解析数据模块开始读取pes流。起播阈值的大小会影响起播时间与起播后的流畅性,该值可量化为20kbyte,如此播放器的起播时间小于15秒。

为了解决音视频不同步的问题,所述音频视频同步控制模获取视频pes流中视频第一帧的pts与系统时间戳同步,每隔段时间获取pes流中视频帧的pts与系统时间戳的差值即差值一并获取pes流中音频帧的pts和系统时间戳的差值即差值二,若差值一与差值二的差值大于时间差阈值,则收取下一个音频帧获取该音频帧的pts与系统时间戳的差值即差值三,若差值三小于差值二,则将差值三对应的音频帧写入解码器进行解码。

具体的来说,本实施例的以vlc进程来提取媒体文件es数据并以共享内存方式交付客户端的实现方式为:

1)服务端的vlc进程以文件写入方式输出媒体文件解析的并打包后的pes流到循环缓存,具体控制命令为:

argv[argc++]="-vvv";argv[argc++]="--no-loop";argv[argc++]="--sout";

argv[argc++]="#es{access=file,

dst-video=/mnt/usb/video_%d.%c,st-audio=/mnt/usb/audio_%d.%c}";

该控制指令为将解析输出的es流写入到本地存储盘/mnt/usb。

2)vlc进程运行初始化阶段关联共享内存地址到本地内存地址,内存大小分配为视频pes数据缓存为3.768m字节,音频pes数据缓存为1.88m字节,控制信息缓存1024k字节。

3)vlc进程接收播放请求后,获取文件播放地址后调用libvlc_media_get_duration获取媒体的时长信息,通过接口libvlc_media_get_tracks_info获取音频及视频的编码格式信息,通过调用接口libvlc_media_player_play开启vlc的播放流程。

4)vlc将解析获取的音频及视频的编码格式、播放文件的时长和音视频的pid信息写入共享内存控制信息缓存。

5)打断vlc原有的播放流程,修改函数decoderprocesssout在得到解析es数据后,将解析的视频es数据编码成视频pes流经重新封装的接口sout_accessoutmemorywrite写入共享内存中视频循环缓存,解析的音频es数据编码成音频pes流经重新封装的接口sout_accessoutmemorywrite写入共享内存中音频循环缓存。

6)在解析过程遇到解析状态信息变化时同步写入文件播放到结尾及文件解析出错等解析状态信息值控制信息缓存。

如图3所示,该图为读取视频pes流数据量的算法流程图,鉴于读取视频pes流的过程为循环读取的过程,该流程图仅展示了一轮读取的过程,写解析数据模块记录有写地址偏移值和写循环次数,读解析数据模块记录有读地址偏移值和读循环次数,其中,写循环次数为完整写完一遍视频循环缓存的次数,读循环次数为完整读完一遍视频循环缓存的次数。读取视频pes流的步骤包括:

a、首先判断写地址偏移值是否小于读地址偏移值,若判定为是,则进入步骤b,否则进入步骤c。

b、判断写循环次数是否大于读循环次数,若判定为是,则进入步骤d,否则进入步骤m。

c、判断写循环次数是否等于读循环次数,若判定为是,则进入步骤e,否则进入步骤f。

d、待读取数据量等于写地址偏移量加上视频循环缓存的大小减去读地址偏移值后减去一,读取相应待读取数据量的视频pes流,进入步骤h。

e、待读取数据量等于写地址偏移值减去读地址偏移值,读取相应待读取数据量的视频pes流,进入步骤h。

f、判断写循环次数是否大于读循环次数,若判断为是,则进入步骤g,否则进入步骤o。

g、待读取数据量等于写地址偏移值,读取相应待读取数据量的视频pes流,进入步骤h。

h、待读取数据量写入底层解码器缓存,进入步骤i。

i、读取解码器状态返回实际写入解码器的数据量,进入步骤j。

j、判定读地址偏移量加上实际写入解码器的数据量是否大于视频缓存空间大小,若判定为是,则进入步骤k,否则进入步骤l。

k、更新读状态,新一轮的读地址偏移量等于实际写入解码器的数据量减去视频缓存大小加上读地址偏移量加一,读循环次数加一,进入步骤o。

l、更新读状态,新一轮的读地址偏移量等于读地址偏移量加上实际写入解码器的数据量,读循环次数保持不变,进入步骤o。

m、抛出读控制异常,读地址偏移量等于写地址偏移量,读循环次数等于写循环次数。

o、本轮循环结束。

音频pes数据缓存也是一个循环缓存,读音频pes流的流程图与上述读视频pes流的流程图类似,不再赘述。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1