1.本发明涉及一种实时视频通信中的数据编码方法及媒体终端设备。
背景技术:2.在实时视频通话的业务场景中,音视频数据所采用的编码规范有很多格式,包括h.263、h.264、h.265、h.266、vp8、vp9、av1等等,不同编码格式所具备的压缩效率差异是很大的(比如h.263和h.266的压缩效率,最大可能相差10倍);通常压缩效率越高的编码方式,复杂度也越高,计算能力也需要越大(同样比较h.263和h.266,算力需求可能相差100倍)。
3.即使是同一个编码格式比如h.264,不同的profile(编码器模式)所能带来的压缩效率和需要的计算力,相差也有几倍;同样,即便是相同的profile(编码器模式),有的编码器比如h264,提供不同档的编码速度,其压缩效率和速度也会分别相差几倍和几十倍。
4.对于实时视频通话运行的终端设备,有的是手机,有的是pc,有的是嵌入式设备如盒子或手表,其算力差异也是几倍到上百倍。
5.由于实时视频通话的复杂性,为了保证基本互通外,通常不考虑编码器应用的组合,即不考虑最优解。具体的,现有的方案通常是基于静态的优先级配置,比如在终端事先配置好优先级,比如最先采用h.265对数据进行编码,然后采用h.264对数据进行编码,然后根据能力协商协议(rfc4566/rfc3254)进行协商,通过双方确定编解码类型。稍微优化一点的方案,考虑了设备性能的差异性,支持不对称协商,从而发挥低性能设备和高性能设备的不同特点,采用不同的编码和解码格式,然而当协商完成后,采用的编码格式依然是固定不变的,因此在实时运行过程中,既不会因为硬件设备温度过高等原因降频运行而有变化,也不会因为网络带宽的动态变化而有变化。因此,可以肯定的说,现有方案并没有在已知各种视频编解码能力的基础上,获得最优的处理方法。而如何基于现有设备算力支持的能力进行能力协商,依然是一个值得优化的问题。
技术实现要素:6.本发明所要解决的首要技术问题是针对上述现有技术提供一种能够适应频繁变化的网络状态、同时发挥不同编码器不同优势、从而获得最大的信息传递收益和相对最低的网络或计算资源的实时视频通信中的数据编码方法。
7.本发明进一步所要解决的技术问题是提供一种实时视频通话过程中数据编码能够适应频繁变化的网络状态、同时发挥不同编码器不同优势、从而获得最大的信息传递收益和相对最低的网络或计算资源的媒体终端设备。
8.本发明解决上述首要技术问题所采用的技术方案为:一种实时视频通信中的数据编码方法,其特征在于:预先保存编码器状态集合,编码器状态集合中的对象为编码器状态,编码器状态集合的个数为n,编码器状态为某编码器的配置状态,每个编码器状态包括的内容有:编号、编码器模式名称、rs、cr、thmax、thbw、th和certainty,其中rs表示编码器状态的相对速度,为预先设定常数;cr表示编码器状态的压缩率,为预先设定常数;thmax表
示编码器状态的最大视频吞吐率;thbw表示基于当前可用网络带宽下所能达到的视频吞吐率,单位为bps;th表示编码器状态能够做到的视频吞吐率,单位为bps;certainty为确定性标记,表示对某编码器状态的最大吞吐率thmax是否经过测试确定,其取值为:unknown或presume或confirmed,其中unknown表示未知;presume表示通过rs推断,confirmed表示已实际测量确定;
9.然后通过如下步骤对实时视频通信中的数据进行编码:
10.步骤1、实时视频通信会话开始后,首先默认使用编号为i的编码器状态运行t1秒,然后进入步骤2;
11.步骤2、获取如下参数:gth、w、h、bw、et和cur;
12.其中gth为目标视频吞吐率,x为实时视频通信中需要传输的视频流个数,w[j]表示对应第j个视频流图像的宽度;h[j]表示对应第j个视频流图像的高度;gfps为订阅的目标视频帧率,设yuv格式的视频每像素占1.5字节、每字节8bit,因此gth单位为每秒像素比特位数,即bps;
[0013]
w和h分别为编码图像宽度和高度,按当前实际编码的最大图像的宽度和高度给定;
[0014]
et为编码时长,为对应分辨率多帧图像的平均编码时长,为常数;
[0015]
bw为当前估计的网络可用带宽,bw=bwe
‑
other\_bitrate,bwe为当前估算的网络带宽,other_bitrate为其它必须预留带宽;
[0016]
cur为当前使用的编码器状态的编号,cur取值范围为1~n,cur的初始值为i;
[0017]
步骤3、计算得到当前编码器状态中的参数数据thmax[cur],并做确定性标记certainty[cur]为confirmed;
[0018][0019]
thmax[cur]为编号为cur的编码器状态中的参数thmax的值;thbw[cur]为编号为cur的编码器状态中的参数thbw的值;certainty[cur]为编号为cur的编码器状态中的参数certainty的值;
[0020]
步骤4、计算编码器状态集合中certainty为confirmed外,其余所有编码器状态中对应的最大视频吞吐率thmax的集合,并且设置certainty为presume;
[0021][0022]
其中,t的取值范围为1~n;
[0023]
步骤5、计算编码器状态集合所有编码器状态的thbw的值:
[0024][0025]
而其中
[0026][0027]
k取值范围为1~n;
[0028]
步骤6、逐个比较编码器状态集合中每个编码器状态中的thmax和thbw,取thmax和thbw两者中较小的值,将得到的值赋值给对应编码器状态的th;
[0029]
步骤7、将步骤2得到的gth和编码器状态集合中每个编码器状态中的th值逐个比较大小:
[0030]
如果gth比所有编码器状态中的th值都大,找到所有编码器状态中th值最大的那个编码器状态,将该编码器状态的编号赋值给cur;
[0031]
如果所有编码器状态中的th值有比gth大的,将编码器状态中th值比gth大的编码器状态组成一个集合,称为临时编码器状态集合,在临时编码器状态集合中,每个编码器状态中th均比gth大,找到临时编码器状态集合中cr值最高的编码器状态,将该编码器状态的编号赋值给cur;
[0032]
步骤8、使用编号为cur的编码器状态运行t2秒,然后返回步骤2,重复执行步骤2~步骤7,直到实时视频通信会话结束。
[0033]
2、根据权利要求1所述的实时视频通信中的数据编码方法,其特征在于:编号为i的编码器状态中编码器模式名称为h264
‑
veryfast,t1为2~5;t2为3~7。
[0034]
3、根据权利要求1所述的实时视频通信中的数据编码方法,其特征在于:所述编码器状态集合中的编码器状态包括以下几个:
[0035][0036][0037]
本发明解决上述进一步技术问题所采用的技术方案为:一种媒体终端设备,包括能与被叫方建立音视频通道、并负责音视频媒体数据的收发和编解码的媒体引擎模块,其特征在于:所述媒体引擎模块内集成有编码器状态策略选择模块,该编码器状态策略选择模块采用上述数据编码方法对实时视频通信中的数据进行编码。
[0038]
与现有技术相比,本发明的优点在于:本发明的方法在已知各种软硬件视频编解
码能力的基础上,根据实际场景中参与的多种关键变量参数,特别是能根据当前的网络状态,以及不同编码器状态的编解码和处理吞吐量信息的能力,采用混合编码方式,每间隔一段时间后,重新获取最优处理效果的编码器状态,然后使用最优编解码状态对通信数据进行编解码,能够适应不同的终端环境,且无需检测cpu占有率,适应性广;能够适应频繁变化的网络状态,同时发挥不同编码器不同优势,获得最大的信息传递收益和相对最低的网络或计算资源。
附图说明
[0039]
图1为本发明实施例中实时视频通信中的数据编码方法的流程图。
具体实施方式
[0040]
以下结合附图实施例对本发明作进一步详细描述。
[0041]
如图1所示的一种实时视频通信中的数据编码方法,首先预先保存编码器状态集合,编码器状态集合中的对象为编码器状态,编码器状态集合的个数为n,编码器状态为某编码器的配置状态,每个编码器状态包括的内容有:编号、编码器模式名称、rs、cr、thmax、thbw、th和certainty,其中rs表示编码器状态的相对速度,为预先设定常数;cr表示编码器状态的压缩率,为预先设定常数;thmax表示编码器状态的最大视频吞吐率,单位为bps thmax一开始是未知的,经过一段时间运行后可以测量得到,thmax的计算公式参加步骤3;thbw表示基于当前可用网络带宽下所能达到的视频吞吐率,单位为bps,thbw一开始也是未知的,经过一段时间运行后可以测量得到,thbw的计算公式参加步骤4;th表示编码器状态能够做到的视频吞吐率,单位为bps,th一开始也是未知的,经过一段时间运行后可以测量得到,th的获取方式参加步骤6;certainty为确定性标记,表示对某编码器状态的最大吞吐率thmax是否经过测试确定,其取值为:unknown或presume或confirmed,其中unknown表示未知;presume表示通过rs推断,confirmed表示已实际测量确定;
[0042]
编码器模式集合内容举例如下:
[0043]
编号编码器模式名称rscrthmaxthbwthcertainty1h264
‑
ultrafast1165
ꢀꢀꢀꢀ
2h264
‑
superfast0.6276
ꢀꢀꢀꢀ
3h264
‑
veryfast0.5331
ꢀꢀꢀꢀ
4h264
‑
faster0.3368
ꢀꢀꢀꢀ
5h264
‑
fast0.2415
ꢀꢀꢀꢀ
6h264
‑
medium0.1442
ꢀꢀꢀꢀ
7av1
‑
ultrafast0.25737
ꢀꢀꢀꢀ
8av1
‑
superfast0.2829
ꢀꢀꢀꢀ
9av1
‑
veryfast0.1921
ꢀꢀꢀꢀ
10av1
‑
fast0.05950
ꢀꢀꢀꢀ
11ios
‑
hw
‑
hevc0.9400
ꢀꢀꢀꢀ
[0044]
每个编码器状态都包含多个属性,包括编号、编码器模式名称、rs、cr、thmax、thbw、th和certainty,把它对象化存储到一个数组,我们称之为“编码器状态集合”;
[0045]
然后通过如下步骤对实时视频通信中的数据进行编码:
[0046]
步骤1、实时视频通信会话开始后,首先默认使用编号为i的编码器状态运行t1秒,然后进入步骤2;本实施例中,i=3,对应编码器状态中编码器模式名称为h264
‑
veryfast,t1为2~5;
[0047]
步骤2、获取如下参数:gth、w、h、bw、et和cur;
[0048]
其中gth为目标视频吞吐率,x为实时视频通信中需要传输的视频流个数,w[j]表示对应第j个视频流图像的宽度;h[j]表示对应第j个视频流图像的高度;gfps为订阅的目标视频帧率;
[0049]
w和h分别为编码图像宽度和高度,按当前实际编码的最大图像的宽度和高度给定;
[0050]
et为编码时长,为对应分辨率多帧图像的平均编码时长,为常数;
[0051]
bw为当前估计的网络可用带宽,bw=bwe
‑
other\_bitrate,bwe为当前估算的网络带宽,other_bitrate为其它必须预留带宽;
[0052]
cur为当前使用的编码器状态的编号,cur取值范围为1~n,cur的初始值为i;
[0053]
步骤3、计算得到当前编码器状态中的参数数据thmax[cur],并做确定性标记certainty[cur]为confirmed;
[0054][0055]
thmax[cur]为编号为cur的编码器状态中的参数thmax的值;thbw[cur]为编号为cur的编码器状态中的参数thbw的值;certainty[cur]为编号为cur的编码器状态中的参数certainty的值;
[0056]
步骤4、计算编码器状态集合中certainty为confirmed外,其余所有编码器状态中对应的最大视频吞吐率thmax的集合,并且设置certainty为presume;
[0057][0058]
其中,t的取值范围为1~n;
[0059]
步骤5、计算编码器状态集合所有编码器状态的thbw的值:
[0060][0061]
而其中
[0062][0063]
k取值范围为1~n;
[0064]
步骤6、逐个比较编码器状态集合中每个编码器状态中的thmax和thbw,取thmax和thbw两者中较小的值,将得到的值赋值给对应编码器状态的th;
[0065]
步骤7、将步骤2得到的gth和编码器状态集合中每个编码器状态中的th值逐个比较大小:
[0066]
如果gth比所有编码器状态中的th值都大,找到所有编码器状态中th值最大的那
个编码器状态,将该编码器状态的编号赋值给cur;
[0067]
如果所有编码器状态中的th值有比gth大的,将编码器状态中th值比gth大的编码器状态组成一个集合,称为临时编码器状态集合,在临时编码器状态集合中,每个编码器状态中th均比gth大,找到临时编码器状态集合中cr值最高的编码器状态,将该编码器状态的编号赋值给cur;
[0068]
步骤8、使用编号为cur的编码器状态运行t2秒,然后返回步骤2,重复执行步骤2~步骤7,直到实时视频通信会话结束;t2为3~7,优选5秒。
[0069]
本发明实施例还提供一种媒体终端设备,包括能与被叫方建立音视频通道、并负责音视频媒体数据的收发和编解码的媒体引擎模块,媒体引擎模块内集成有编码器状态策略选择模块,该编码器状态策略选择模块采用上述数据编码方法对实时视频通信中的数据进行编码。