【发布时间】:2023-03-27 13:39:01
【问题描述】:
我正在使用 FFmpeg 在 iOS 应用程序中读取一些 RTSP 流。如果防火墙或其他服务阻止网络通过UDP 接收,FFmpeg 很好地回退到通过TCP 读取。我的问题是:如何通知我回退到 TCP 发生了?我需要知道应用程序是否通过UDP 或TCP 读取流,并且仍然让FFmpeg 做它的后备。
有回调吗?有没有办法获取正在使用的协议?
谢谢。
【问题讨论】:
我正在使用 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 实例。
【讨论】: