本帖 旨在交流讨论FreeSWITCH的混屏能力,测试结果,以及分析是否有提升的可能性能
FreeSWITCH软件版本:1.6.11
硬件配置:戴尔服务器,双CPU Intel(R) Xeon(R) Silver 4116 CPU @ 2.10GHz,内存16GB(8+8双通道)
测试环境:利用sipp与FS建立媒体通道,并且sipp上行打流到FS服务器的为1080P 25fps GOP250视频。
会议配置:1080P 30fps
20.19.01.29
测试结果:
1. 5x5布局,只有20人入会,帧率只能维持在20~25fps左右,无法达到30fps
结果分析:
1.通过增加log,发现帧率无法提升是由于FS混屏采用的是多线程补丁式混屏处理,即每个成员起一条线程(conference_video_muxing_write_thread_run),只负责自己分配的窗口,在canvas->img上特定坐标范围完成各自的混屏处理。主编码处理线程需要等待所有混屏线程处理完本轮混屏,才能开始编码。从打印的结果来看,混屏处理等待有时候会超过33ms,从而造成编码帧率下降。
2.conference_video_scale_and_patch接口中,将canvas->mutex互斥锁去掉,可维持在30fps。
3.因此,本人大概率认为FreeSWITCH的编码帧率无法达到预期目标,由于混屏处理同步等待,以及互斥锁导致多线程混屏竞争导致处理较慢。
讨论:
期望有相关开发人员来本帖讨论,提升FreeSWITCH的混屏能力,欢迎大家来跟帖讨论,谢谢!