我修改了Kurento Room Demo,使其可以作为MCU运行,在Room对象中创建了一个Composite,并将其连接到会议参与者的HubPorts。在以下情况下出现问题:
第二个用户离开会议时,视频流会阻塞。
在所有其他情况下,它都可以正常工作:
仅当从浏览器加入呼叫的用户离开呼叫时,问题才会出现。
如果有使用Android设备的用户和来自浏览器的1个以上的用户,则当最后一个使用浏览器的用户离开会议时,将出现问题。
所有用户都在使用VP8编解码器(这是Android和Web客户端中SDP中的首选编解码器)
我注意到的一点是,当我仅以1个用户加入会议时,我始终将代码转换为有效。这正常吗?:
info kmsutils kmsutils.c:494 kms_utils_pad_monitor_gaps() <'':sink_video_default> Add probe: Detect stream gaps
info agnosticbin kmsagnosticbin.c:774 kms_agnostic_bin2_link_pad() <kmsagnosticbin2-386> Upstream provided caps: ANY
info agnosticbin kmsagnosticbin.c:783 kms_agnostic_bin2_link_pad() <kmsagnosticbin2-386> Downstream wanted caps: video/x-vp8
info agnosticbin kmsagnosticbin.c:729 kms_agnostic_bin2_find_or_create_bin_for_caps() <kmsagnosticbin2-386> TRANSCODING ACTIVE for video
info agnosticbin kmsagnosticbin.c:774 kms_agnostic_bin2_link_pad() <kmsagnosticbin2-386> Upstream provided caps: video/x-vp8, profile=(string){ 0, 1, 2, 3 }
info agnosticbin kmsagnosticbin.c:783 kms_agnostic_bin2_link_pad() <kmsagnosticbin2-386> Downstream wanted caps: video/x-vp8
info agnosticbin kmsagnosticbin.c:774 kms_agnostic_bin2_link_pad() <kmsagnosticbin2-386> Upstream provided caps: video/x-vp8, profile=(string){ 0, 1, 2, 3 }
info agnosticbin kmsagnosticbin.c:783 kms_agnostic_bin2_link_pad() <kmsagnosticbin2-386> Downstream wanted caps: video/x-vp8
fixme basesink gstbasesink.c:3125 gst_base_sink_default_event() <treebin_fakesink1262> stream-start event without group-id. Consider implementing group-id handling in the upstream elements
info basertpendpoint kmsbasertpendpoint.c:1882 kms_base_rtp_endpoint_jitterbuffer_set_latency() <rtpjitterbuffer43> Add probe: Set jitterbuffer latency
info basertpendpoint kmsbasertpendpoint.c:1931 kms_base_rtp_endpoint_jitterbuffer_monitor_rtp_out() <rtpjitterbuffer43> Add probe: Adjust jitterbuffer PTS out
info basertpendpoint kmsbasertpendpoint.c:1976 kms_base_rtp_endpoint_jitterbuffer_monitor_rtcp_in() <rtpjitterbuffer43> Add probe: Get jitterbuffer RTCP SR timing
info basertpendpoint kmsbasertpendpoint.c:1867 kms_base_rtp_endpoint_jitterbuffer_set_latency_probe() <rtpjitterbuffer43> Setting latency to: 500
info basertpendpoint kmsbasertpendpoint.c:1870 kms_base_rtp_endpoint_jitterbuffer_set_latency_probe() <rtpjitterbuffer43> Jitterbuffer latency set; remove probe
info kmsutils kmsutils.c:494 kms_utils_pad_monitor_gaps() <'':sink> Add probe: Detect stream gaps
info kmsutils kmsutils.c:1480 kms_utils_depayloader_monitor_pts_out() <rtpvp8depay43> Add probe: Adjust depayloader PTS out
info agnosticbin kmsagnosticbin.c:899 input_bin_src_caps_probe() <kmsagnosticbin2-392> Set input caps: video/x-vp8, framerate=(fraction)9/1, height=(int)720, width=(int)1280, profile=(string)0
info agnosticbin kmsagnosticbin.c:774 kms_agnostic_bin2_link_pad() <kmsagnosticbin2-392> Upstream provided caps: ANY
info agnosticbin kmsagnosticbin.c:783 kms_agnostic_bin2_link_pad() <kmsagnosticbin2-392> Downstream wanted caps: video/x-raw, width=(int)960, height=(int)540, pixel-aspect-ratio=(fraction)1/1
info agnosticbin kmsagnosticbin.c:729 kms_agnostic_bin2_find_or_create_bin_for_caps() <kmsagnosticbin2-392> TRANSCODING ACTIVE for video
fixme videodecoder gstvideodecoder.c:1057 gst_video_decoder_drain_out() <vp8dec43> Sub-class should implement drain()
info agnosticbin kmsagnosticbin.c:774 kms_agnostic_bin2_link_pad() <kmsagnosticbin2-392> Upstream provided caps: video/x-raw, format=(string)I420, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }
info agnosticbin kmsagnosticbin.c:783 kms_agnostic_bin2_link_pad() <kmsagnosticbin2-392> Downstream wanted caps: video/x-raw, width=(int)960, height=(int)540, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string){ AYUV, BGRA, ARGB, RGBA, ABGR, Y444, Y42B, YUY2, UYVY, YVYU, I420, YV12, NV12, NV21, Y41B, RGB, BGR, xRGB, xBGR, RGBx, BGRx }
info agnosticbin kmsagnosticbin.c:774 kms_agnostic_bin2_link_pad() <kmsagnosticbin2-392> Upstream provided caps: video/x-raw, format=(string)I420, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }
info agnosticbin kmsagnosticbin.c:783 kms_agnostic_bin2_link_pad() <kmsagnosticbin2-392> Downstream wanted caps: video/x-raw, width=(int)480, height=(int)540, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string){ AYUV, BGRA, ARGB, RGBA, ABGR, Y444, Y42B, YUY2, UYVY, YVYU, I420, YV12, NV12, NV21, Y41B, RGB, BGR, xRGB, xBGR, RGBx, BGRx }
warning kmsaudiomixer kmsaudiomixer.c:771 unlinked_pad() <kmsaudiomixer26:sink_4> Removed before connecting branch