我正在使用RTSP
在iOS应用中阅读一些FFmpeg
流。如果防火墙或其他服务阻止网络通过UDP
接收,FFmpeg
很快就会回退到通过TCP
进行阅读。我的问题是:如何通知我TCP
的回退发生了?我需要知道该应用是否正在通过UDP
或TCP
阅读该流,并且仍然让FFmpeg
做好其后备。
这有回调吗?有没有办法获得正在使用的协议?
谢谢。
答案 0 :(得分:2)
我找到了解决方案:在建立连接后,可以从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
个实例。