chatop2020/AKStream

IsLiveVideo跟直接调用流媒体的getMediaList结果不一致

Closed this issue · 1 comments

有那么一种情况, AK请求直播流时提示超时, 但是实际ZLM在AK超时后开启了RTP推流, 在AK再次请求直播流, 一直提示流媒体响应超时, 在AK请求IsLiveVideo, 返回false, 在ZLM请求getMediaList, 却可以看到流正在推.
那么, AK请求直播流前能否先调用getMediaList, 如果正在推流, 则直接返回播放url

应该是不会存在这个问题的,因为当发现流媒体超时的时候,ak会关闭这个rtp端口,这时zlm即使是正常运作也会关闭掉这个rtp端口,这样也就不会造成你说的情况。
你说的情况也许是在某种极特殊的情况下产生的,可能和操作系统有关系

 try
            {
                SipMethodProxy sipMethodProxy = new SipMethodProxy(Common.AkStreamWebConfig.WaitSipRequestTimeOutMSec);
                var liveVideoRet = sipMethodProxy.Invite(sipChannel, pushMediaInfo, out rs);
                if (!rs.Code.Equals(ErrorNumber.None) || liveVideoRet == false)
                {
                    if (videoChannel.DefaultRtpPort == false && openRtpPort != null) //失败时要关掉rtpserver
                    {
                        ReqZLMediaKitCloseRtpPort reqZlMediaKitCloseRtpPort = new ReqZLMediaKitCloseRtpPort()
                        {
                            Stream_Id = openRtpPort.Stream,
                        };

                        mediaServer.WebApiHelper.CloseRtpPort(reqZlMediaKitCloseRtpPort, out _); //关掉rtp端口
                        mediaServer.KeeperWebApi.ReleaseRtpPort(
                            openRtpPort.Port,
                            out _); //释放rtp端口
                    }

                     GCommon.Logger.Warn($"[{Common.LoggerHead}]->请求Sip推流失败->{deviceId}-{channelId}->{JsonHelper.ToJson(rs)}");

                    return null;
                }
            }
            catch (Exception ex)
            {
                rs = new ResponseStruct()
                {
                    Code = ErrorNumber.Sip_InviteExcept,
                    Message = ErrorMessage.ErrorDic![ErrorNumber.Sip_InviteExcept],
                    ExceptMessage = ex.Message,
                    ExceptStackTrace = ex.StackTrace,
                };

                if (videoChannel.DefaultRtpPort == false && openRtpPort != null) //失败时要关掉rtpserver
                {
                    ReqZLMediaKitCloseRtpPort reqZlMediaKitCloseRtpPort = new ReqZLMediaKitCloseRtpPort()
                    {
                        Stream_Id = openRtpPort.Stream,
                    };

                    mediaServer.WebApiHelper.CloseRtpPort(reqZlMediaKitCloseRtpPort, out _); //关掉rtp端口
                    mediaServer.KeeperWebApi.ReleaseRtpPort(
                        openRtpPort.Port,
                        out _); //释放rtp端口
                }

                return null;
            }