掌桥专利:专业的专利平台
掌桥专利
首页

一种基于ijkplayer播放器的卡顿计算方法

文献发布时间:2024-05-31 01:29:11


一种基于ijkplayer播放器的卡顿计算方法

技术领域

本发明属于流媒体播放技术领域,具体为一种基于ijkplayer播放器的卡顿计算方法。

背景技术

随着数字电视和广电对于播放器质量的要求,播放器的视频质量检测要求也越来越高,对于一些常见的问题需要上报具体的故障。对于故障来进行快速的修复和解决,然而现有播放器只实现了基本功能,无法给出质量问题的具体原因。因此播放器特研发了一种计算视频卡顿问题上报,解决了质量问题无法判断的情况。

随着播放器的视频质量检测要求也越来越高,现有技术只是实现了播放器的播放、暂停等基本功能。而对于视频质量情况没有具体的分析和上报,在数字电视发展的过程中对于播放器的要求也急需要增加视频质量分析的要求。

发明内容

本发明的目的在于提供一种基于ijkplayer播放器的卡顿计算方法,以解决背景技术中提出的现有技术中,视频质量情况缺乏具体的分析和上报的问题。

为解决上述技术问题,本发明所采用的技术方案是:

一种基于ijkplayer播放器的卡顿计算方法,包括以下步骤:

步骤S1,创建播放器,初始化播放器基础配置及播放器环境;

步骤S2,初始化视频解码器,根据视频的播放地址来初始化解码器;

具体为:读取一段播放地址的流数据来初始化解码器的音视频解码变量;

设置画面地址显示图像;设置解码器选项;设置需要播放的视频播放地址,并将视频播放地址,并赋值到全局的播放地址变量,设置当前播放器状态变量为播放状态,来供后续播放使用;

步骤S3,创建播放线程以及图像显示线程;初始化音频和视频包队列、帧队列,包队列即为接收到的数据包队列,帧队列即为解码一个包数据后的一帧音频或视频帧队列;通过设置全局的播放地址来打开视频流地址;

具体为:建立与播放地址的连接,接收来自播放地址发送的音频、视频数据;

接收音频、视频、字幕流数据,并根据音频、视频、字幕类型写入到对应包队列中,图像显示线程从图像队列中取出一帧图像数据进行图像显示;

步骤S4,解码视频包数据;从视频包队列中取出一个视频包数据解码成图像帧数据,写入一帧图像数据到图像队列,判断解码的帧数据,如果是第一帧则创建视频质量判断线程,如果不是第一帧,则直接结束;

循环判断每秒当前的帧数,每秒判断播放器当前帧率是否小于卡顿值,如果小于卡顿值,则说明为视频卡顿,如果大于卡顿值,则说明视频没有卡顿。

根据上述技术方案,步骤S1中,初始化播放器还包括:初始化ijkplayer线程锁、注册函数到java供上层调用、ffmpeg初始化、注册消息回调函数接受消息数据、初始化日志及设置回调。

根据上述技术方案,步骤S3中,创建播放线程具体包括以下步骤:

步骤A1,判断是否有新的播放请求;如果有则跳出循环,如果没有,则继续下一步;

步骤A2,设置解码选项;根据之前初始化的是否硬解码选项,依次设置到解码器中,解码器通过解码选项来改变对应的解码流程;

具体为:硬解码选项通过硬件GPU解码流程来进行解码,软解码通过CPU流程来进行解码;

步骤A3,播放视频流,循环的从创建的视频流地址连接中读取流进行播放;

步骤A4,把收到的流数据写入队列,并跳转回步骤A1,循环播放流,如果有新的请求则跳出循环。

根据上述技术方案,步骤S3中,创建图像显示线程具体包括以下步骤:

步骤B1,判断是否有新的播放请求,如果有则直接结束,如果没有,则继续下一步;

步骤B2,从图像队列中取出一帧图像数据进行后面的图像显示;

步骤B3,解码后的图像帧数据,通过图像格式显示到设置的画面地址中进行图像显示;具体为:一帧图像数据根据格式,YUV、RGB等像素格式数据排列到画面地址中进行显示。

根据上述技术方案,步骤S1中,初始化解码器还包括:初始化图像渲染、初始化解码选项、注册视频解码器函数、打开音频输出函数、初始化视频解码函数以及视频解码器配置函数。

根据上述技术方案,设置画面地址显示图像具体为:通过从前端获取的画面地址设置到播放器中,播放器通过画面地址显示图像到画面区域。

与现有技术相比,本发明具有以下有益效果:

本发明中的方法是通过初始化播放器、视频解码器以及创建播放线程和图像显示线程等步骤,实现对视频播放过程中帧率的监测和判断。在每秒判断播放器当前帧率是否小于设定的卡顿值时,如果小于该值,则可以判断视频出现卡顿情况。

通过本发明中的方法,能够帮助用户或开发人员实时监测视频播放的流畅度,及时发现视频是否存在卡顿现象。这对于视频应用的开发和优化非常重要,可以帮助开发人员及时定位和解决视频播放中的卡顿问题,提升用户体验。

附图说明

图1为本发明流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一

如图1所示,一种基于ijkplayer播放器的卡顿计算方法,包括以下步骤:

步骤S1,创建播放器,初始化播放器基础配置及播放器环境;

步骤S2,初始化视频解码器,根据视频的播放地址来初始化解码器;

具体为:读取一段播放地址的流数据来初始化解码器的音视频解码变量;

设置画面地址显示图像;设置解码器选项;设置需要播放的视频播放地址,并将视频播放地址,并赋值到全局的播放地址变量,设置当前播放器状态变量为播放状态,来供后续播放使用;

步骤S3,创建播放线程以及图像显示线程;初始化音频和视频包队列、帧队列,包队列即为接收到的数据包队列,帧队列即为解码一个包数据后的一帧音频或视频帧队列;通过设置全局的播放地址来打开视频流地址;

具体为:建立与播放地址的连接,接收来自播放地址发送的音频、视频数据;

接收音频、视频、字幕流数据,并根据音频、视频、字幕类型写入到对应包队列中,图像显示线程从图像队列中取出一帧图像数据进行图像显示;

步骤S4,解码视频包数据;从视频包队列中取出一个视频包数据解码成图像帧数据,写入一帧图像数据到图像队列,判断解码的帧数据,如果是第一帧则创建视频质量判断线程,如果不是第一帧,则直接结束;

循环判断每秒当前的帧数,每秒判断播放器当前帧率是否小于卡顿值,如果小于卡顿值,则说明为视频卡顿,如果大于卡顿值,则说明视频没有卡顿。

卡顿值为12(fps)。

本发明中的方法是通过初始化播放器、视频解码器以及创建播放线程和图像显示线程等步骤,实现对视频播放过程中帧率的监测和判断。在每秒判断播放器当前帧率是否小于设定的卡顿值时,如果小于该值,则可以判断视频出现卡顿情况。

通过本发明中的方法,能够帮助用户或开发人员实时监测视频播放的流畅度,及时发现视频是否存在卡顿现象。这对于视频应用的开发和优化非常重要,可以帮助开发人员及时定位和解决视频播放中的卡顿问题,提升用户体验。

实施例二

本实施例为实施例一的进一步细化。

步骤S1中,初始化播放器包括:初始化ijkplayer线程锁、注册函数到java供上层调用、ffmpeg初始化、注册消息回调函数接受消息数据、初始化日志及设置回调。

如图1所示,步骤S3中,创建播放线程具体包括以下步骤:

步骤A1,判断是否有新的播放请求;如果有则跳出循环,如果没有,则继续下一步;

步骤A2,设置解码选项;根据之前初始化的是否硬解码选项,依次设置到解码器中,解码器通过解码选项来改变对应的解码流程;

具体为:硬解码选项通过硬件GPU解码流程来进行解码,软解码通过CPU流程来进行解码;

步骤A3,播放视频流,循环的从创建的视频流地址连接中读取流进行播放;

步骤A4,把收到的流数据写入队列,并跳转回步骤A1,循环播放流,如果有新的请求则跳出循环。

如图1所示,步骤S3中,创建图像显示线程具体包括以下步骤:

步骤B1,判断是否有新的播放请求,如果有则直接结束,如果没有,则继续下一步;

步骤B2,从图像队列中取出一帧图像数据进行后面的图像显示;

步骤B3,解码后的图像帧数据,通过图像格式显示到设置的画面地址中进行图像显示;具体为:一帧图像数据根据格式,YUV、RGB等像素格式数据排列到画面地址中进行显示。

步骤S1中,初始化解码器还包括:初始化图像渲染、初始化解码选项、注册视频解码器函数、打开音频输出函数、初始化视频解码函数以及视频解码器配置函数。

设置画面地址显示图像具体为:通过从前端获取的画面地址设置到播放器中,播放器通过画面地址显示图像到画面区域。

实施例三

本发明的发明构思为:

步骤1、创建播放器,初始化播放器基础配置及播放器环境。初始化ijkplayer线程锁、注册函数到java供上层调用、ffmpeg初始化、注册消息回调函数接受消息数据、初始化日志及设置回调。

步骤2、初始化视频解码器,根据视频或播放地址来初始化解码器。设置画面地址显示图像,设置需要播放的url地址来供后续播放使用。

步骤3、创建播放线程进行播放、图像显示线程进行图像显示。通过传入的地址打开流接收数据写入到队列中,图像显示线程从队列中取出一帧进行图像显示。

步骤4、解码帧数据,写入一帧图像到图像队列,判断解码的帧如果是第一帧则创建视频质量判断线程。帧数据即为一帧图像数据,通过ffmpeg解码得到。循环判断每秒当前的帧数,帧数通过计算每秒中解码的帧数得到,一般图像帧率为25帧/秒,即一个完整的图像帧组。每秒判断播放器当前帧率是否小于卡顿值,如果小于12则说明为视频卡顿,此时少了13帧说明会产生卡顿,需要统计卡顿值进行上报。

本发明采用的方案是解码的视频帧小于视频帧的一半,即判断为卡顿。例如:视频的帧率是25帧,解码器解出的视频只有12帧,小于视频帧的一半(13)既判断为卡顿。

ijkplayer:ijkplayer是一款跨平台的播放器,支持Android、IOS端,核心部分基于ffmpeg编写的播放器框架,支持Android与IOS的硬解。

ffmpeg:ffmpeg是一个跨平台且开源的音视频解码工具、框架,包含了市面上所有主流、非主流的音视频格式、主要功能有解码、转码、格式转换等。

卡顿技术说明:本发明为新加的卡顿计算功能,根据数字广播电视要求视频帧率为25帧/秒,每秒解码帧数值小于12帧则为卡顿,即小于视频帧的一半说明此图像会出现卡顿,由此判断为卡顿进行卡顿计算。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。

最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 一种Android系统的卡顿监控方法、装置及终端设备
  • 基于分级量化的卡顿检测方法、装置、设备及存储介质
  • 基于Unity引擎的卡顿自动检测方法其系统
技术分类

06120116626851