音视频之优化音频造成的内存增长和增加大小流"/>
WebRTC音视频之优化音频造成的内存增长和增加大小流
1、关于多人通话内存不断增长的问题
在旧版本iPhone上(比如:iPhone6、6s、7),四人及以上通话,造成内存不断增长,使用Instrument工具分析,是因为audioFrame创建过快,再加上人数过多以后,CPU处理能力跟不上,释放audioFrame对象逐渐变慢,造成内存逐步上涨,后来查看了线程等级和使用位置,进行了调整,将原来的AudioEncoder线程的等级从NORMAL提高到了HIGH,视图如下:
其实也可以通过修改其他两个关于video和stream的线程等级达到效果,但是会造成视频画面卡顿,效果不太理想,所以相对于来说,改audio的比较合适。
2、关于video大小流的分辨率更改问题
为了适配多人通话,所以将视频流分成了大小流,即高清晰度和低清晰度,比如场景:设置开启双流的开关,默认订阅远端视频流的小流,当需要清楚查看远端某个人的视频时,可以将此人切换至大流,在具体情况下使用,可以有效的优化多人视频,减少多人会话时的资源消耗。
webrtc_video_enginestd::vector<webrtc::VideoStream> EncoderStreamFactory::CreateEncoderStreams(int width,int height,const webrtc::VideoEncoderConfig& encoder_config) {RTC_DCHECK_GT(encoder_config.number_of_streams, 0);RTC_DCHECK_GE(encoder_config.simulcast_layers.size(),encoder_config.number_of_streams);std::vector<webrtc::VideoStream> layers;const absl::optional<webrtc::DataRate> experimental_min_bitrate =GetExperimentalMinVideoBitrate(encoder_config.codec_type);if (encoder_config.number_of_streams > 1 ||((absl::EqualsIgnoreCase(codec_name_, kVp8CodecName) ||absl::EqualsIgnoreCase(codec_name_, kH264CodecName)) &&is_screenshare_ && conference_mode_)) {const bool temporal_layers_supported =absl::EqualsIgnoreCase(codec_name_, kVp8CodecName) ||absl::EqualsIgnoreCase(codec_name_, kH264CodecName);// Use legacy simulcast screenshare if conference mode is explicitly enabled// or use the regular simulcast configuration path which is generic.layers = GetSimulcastConfig(encoder_config.number_of_streams, width, height,encoder_config.bitrate_priority, max_qp_,is_screenshare_ && conference_mode_,temporal_layers_supported);//屏幕共享只保留大流 if(is_screenshare_ && layers.size() == 2) {layers.pop_back();}// Allow an experiment to override the minimum bitrate for the lowest// spatial layer. The experiment's configuration has the lowest priority.if (experimental_min_bitrate) {layers[0].min_bitrate_bps =rtc::saturated_cast<int&
更多推荐
WebRTC音视频之优化音频造成的内存增长和增加大小流
发布评论