视频会议订阅模式难点

视频会议订阅问题:

  • 除了video_floor_holder成员能read到视频,其他成员都不能。
  • 视频会议订阅模式那边,conference_thread_run函数中第一个for循环获取每一个成员视频包有问题,其中只有当前是vid_floor的成员才能从session中read到数据(switch_core_session_read_video_frame函数)。其他所有成员都read不到任何数据。
  • 具体read执行,是转到了switch_core_media.c中的switch_core_media_read_frame函数,
    除video_floor_holder外的成员会执行到第1800行:
switch_media_handle_t  *smh = session->media_handle;
switch_rtp_engine_t  *engine = &smh->engines[type];

if (engine->read_mutex[type] && switch_mutex_trylock(engine->read_mutex[type]) 
!= SWITCH_STATUS_SUCCESS) {
    /* return CNG, another thread is already reading. */
    switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), 
             SWITCH_LOG_DEBUG1,"%s is already being read for %s\n", 
             switch_channel_get_name(session->channel), type2str(type));
    return SWITCH_STATUS_INUSE;
}

然后就退出了函数。
而video_floor_holder成员会跳过这个if判断,接着往后面执行,进入一个while循环才能具体地接收数据。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容