IsLiveVideo跟直接调用流媒体的getMediaList结果不一致
Closed this issue · 1 comments
tonyonce2017 commented
有那么一种情况, AK请求直播流时提示超时, 但是实际ZLM在AK超时后开启了RTP推流, 在AK再次请求直播流, 一直提示流媒体响应超时, 在AK请求IsLiveVideo, 返回false, 在ZLM请求getMediaList, 却可以看到流正在推.
那么, AK请求直播流前能否先调用getMediaList, 如果正在推流, 则直接返回播放url
chatop2020 commented
应该是不会存在这个问题的,因为当发现流媒体超时的时候,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;
}