FFmpeg UDP 超时,重试 TCP 回调
FFmpeg UDP timeout, retrying with TCP callback
我正在使用 FFmpeg
在 iOS 应用中阅读一些 RTSP
流。如果防火墙或其他服务阻止网络通过 UDP
接收,FFmpeg
会很好地返回到通过 TCP
读取。我的问题是:如何通知我回退到 TCP
已发生?我需要知道应用程序是否正在通过 UDP
或 TCP
读取流,并且仍然让 FFmpeg
做它很好的回退。
这有回调吗?有没有办法获取正在使用的协议?
谢谢。
我找到了解决方案:建立连接后,可以从 AVFormatContext
的私有数据 (priv_data
) 中读取较低的传输协议。下面是我的做法:
-(BOOL)lowerTransportProtocolIsUDP
{
RTSPState* rtsp_state = (RTSPState*) _avFmtCtx->priv_data;
enum RTSPLowerTransport lowerTransportProtocol = rtsp_state->lower_transport;
NSLog(@"lowerTransportProtocol = %d", lowerTransportProtocol);
if (lowerTransportProtocol == RTSP_LOWER_TRANSPORT_UDP) {
return YES;
}
return NO;
}
其中 _avFmtCtx
是一个 AVFormatContext
实例。
我正在使用 FFmpeg
在 iOS 应用中阅读一些 RTSP
流。如果防火墙或其他服务阻止网络通过 UDP
接收,FFmpeg
会很好地返回到通过 TCP
读取。我的问题是:如何通知我回退到 TCP
已发生?我需要知道应用程序是否正在通过 UDP
或 TCP
读取流,并且仍然让 FFmpeg
做它很好的回退。
这有回调吗?有没有办法获取正在使用的协议?
谢谢。
我找到了解决方案:建立连接后,可以从 AVFormatContext
的私有数据 (priv_data
) 中读取较低的传输协议。下面是我的做法:
-(BOOL)lowerTransportProtocolIsUDP
{
RTSPState* rtsp_state = (RTSPState*) _avFmtCtx->priv_data;
enum RTSPLowerTransport lowerTransportProtocol = rtsp_state->lower_transport;
NSLog(@"lowerTransportProtocol = %d", lowerTransportProtocol);
if (lowerTransportProtocol == RTSP_LOWER_TRANSPORT_UDP) {
return YES;
}
return NO;
}
其中 _avFmtCtx
是一个 AVFormatContext
实例。