视频会议订阅问题:
- 除了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循环才能具体地接收数据。