云实时音频视频SDK可与市场上的各种智能硬件设备(尤其是各种类型和不同版本的手机)配合使用,以确保SDK的稳定性。但是,与智能手机适应不同,智能硬件的适应存在多种茄子差异。
1.许多智能硬件的硬件配置(如主内存和CPU性能)通常低于手机性能。
2.一些供应商在智能硬件的相机安装方向、数量、类型和手机方面存在很大差异。
因此,在适应问题上,智能硬件需要单独的验证讨论,以下是针对所有人的详细分析。
视频捕获适应
采集方式合适
云实时音频视频SDK相机收集数据同时提供Texture和YUV(NV21),您可以设置多种收集方法来获取Texture ID或byte远视视频流数据。纹理ID用于表示图像照片或一系列数据,使用纹理可以更详细地表示对象,YUV是从相机中收集的NV21格式数据。
YUV是一种颜色编码格式,可以解释为主要用于视频、图形处理线(pipeline)的远视视频流数据。与RGB色彩空间相比,YUV旨在编码、传输、减少带宽使用量和减少信息错误。
forning live音频视频SDK默认情况下以Texture方式收集,在本地使用时,编码器默认情况下为Android .media . mediacodecinfo . codec capabilities . color _ format surfo。如果纵断面不支持色彩空间,则可能会出现屏幕解码或解码失败的问题,开发人员可以在加入房间之前调用rongrtcconfig . builderenablevideotexture方法来设置是否以texture方式收集色彩空间。
拟合相机
智能硬件摄像头安装方向、数量和类型导致视频收集问题时,云实时音频视频SDK的RongRTCConfig。Builder类设置方法可以通过setCameraDisplayOrientation和setCustomizedCameraParameter进行设置,用于修改摄影机收集角度和Android . hardware . cameraset parameters(parameters
Rongyun实时音频视频SDK通过AndroID . hardware . camera . getnumberofcameras()方法获取可用的摄像头id。默认情况下,前照相机处于打开状态。需要打开鱼眼镜或多个摄影机硬件设备场景时,可以使用
Rongrtccapture.getinstance()。打开startcameracapture,切换;
Rongrtccapture.getinstance()。switchcamera指定ID的摄影机。
如果智能硬件具有USB摄像头或USB麦克风,Android系统无法识别外部设备,调用上述方法将无法打开硬件设备(本地视频无法端对端查看)。对于牙齿,建议使用云实时音频视频SDK发布自定义视频流功能。
二、视频编解码器适应
融合音频视频SDK是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)牙齿共同组成的联合视频,作为MPEG-4的第10部分,它支持H.264编解码器,以支持高压缩、高质量、多种网络的流媒体传输着称
使用云音频视频SDK时,您可以设置配置信息(例如编码器色彩空间、编码级别、编码帧速率、编码关键帧间隔时间、编码器速度控制模式等),以解决设备编解码器引起的问题。
色彩空间编码
在熔深RTCLib SDK中,相机收集数据的颜色格式为NV21,为YUV420格式,如果智能硬件供应商自定义了颜色空间,则熔深SDK内部处理颜色空间逻辑和设备支持的颜色空间不匹配。编码错误报告、端到端解码失败、端到端市政厅屏幕等。如果遇到牙齿问题,开发人员可以使用rongrtcconfig . buildersethardwareencodecolor方法修改编码色彩空间以解决此问题。
编码等级。
编码视频后,显示的数据质量较低,因此要调整质量,必须设置编码级别级别级别,配置文件。熔深SDK默认使用Android . media . mediacodecinfo . codecprofilelevel . avcprofilebaseline。开发人员也可以通过rongrtcconfig . builderenablehardwareencodehighprofile方法将其设置为and roid . media . mediacodecinfo . codecprofilelevel .与AVCProfileHigh相对应的编码
Android 6.0源代码(Android/6 . 0 . 1 _ r16/xref/frameworks/av/media/libstagefright/acodec . CPP)
Android 7.0源代码(Android/7 . 0 . 0 _ r31/xref/frameworks/av/media/libstagefright/acodec . CPP)
编码速度控制模式
对于需要传输高质量视频流的场景,除了通过设置分辨率、帧速率和比特率来提高视频质量外,还可以控制编码速率。云SDK默认使用CBR,开发人员可以使用音频视频SDK的rongrtcconfig . buildersethardwareencodebitratemode,牙齿属性Android 5.0开始支持参数设置。以下是三种茄子模式的介绍。
关键帧间隔时间编码
H.264标准包括Instantaneous Decoding Refresh(IDR、即时解码刷新、以下I帧)。H.264图像由序列组成。一个序列是图像编码数据流,从I帧开始,到下一个I帧结束。两个I帧之间是多个p帧(Predictive-frame)或b帧(Bi-directional predicted frames)牙齿,编码关键帧间隔时间是IDR间隔时间。
I帧:GOP(图片组)的第一帧,通常是MPEG使用的视频压缩技术。I帧图像使用帧内编码方案。也就是说,它仅利用单帧图像内的空间从属关系,而不是时间从属关系。I帧使用帧内压缩,而不使用运动补偿。I帧是随机访问的入口点,是解码的基准帧,因为它不依赖于其他帧。I帧主要用于解码器初始化以及节目切换和插入。I帧图像的压缩倍数相对较低。I帧图像定期显示在图像序列中。发生频率可以在编码器中选择,I帧压缩可以消除视频的空间重复,B、P用于消除时间重复。
P帧:向前参考帧(仅第一帧后的帧,与前一帧有差异,因此可以提高压缩效率和图像质量)、压缩时仅参考前一帧、帧间编码方法(即同时利用空间和时间依赖性)、P帧图像可以包含帧内编码部分。也就是说,P帧中的每个宏块可以是向前预测的,参考之前的B帧或I帧解码整个图像。
b帧:双向参考帧,压缩参考前一帧和下一帧,帧之间的压缩技术。压缩比高,网络不好,实时要求高等,实时交互式直播一般不使用。请记住,由于b帧图像使用未来帧作为参考,因此MPEG-2编码代码流中的图像帧传输顺序和显示顺序不同。
H.264使用多帧预测,因此I帧后的p帧可以参考I帧前的帧,因此随机访问时无法将I帧作为参考条件找到。即使找到I帧,I帧后面的数据也可能无法解释数据,IDR帧是特殊的I帧。因为牙齿帧后面的所有参考帧仅参考和未参考IDR,所以解码器收到IDR帧时,将立即清除参考帧缓冲区,并将IDR帧用作参考帧。
熔深SDK的关键帧间隔时间默认为100秒,开发人员可以通过rongrtcconfig . buildersethardwareencodekeyframeinterval方法修改间隔时间。将牙齿值设置得太小会增加网络流量和编解码器压力。太大的话,如果网路有变动,影像品质就会下降。这是实时音频视频SDK丰富了智能硬件视频适应的经验,希望能帮助开发者朋友理解智能硬件的适应。