我正在使用RTSP
在iOS应用程序中读取一些FFmpeg
流。如果防火墙或其他服务阻止网络通过UDP
接收消息,则FFmpeg
可以很好地回退到通过TCP
进行读取。我的问题是:如何通知TCP
后备发生?我需要知道该应用程序是通过UDP
还是TCP
读取流,并且仍然让FFmpeg
做好其后备操作。
有回调吗?有没有办法获取正在使用的协议?
谢谢。
最佳答案
我找到了解决方案:建立连接后,可以从AVFormatContext
的 private 数据(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
实例。