FFmpeg UDP 超时,重试 TCP 回调

FFmpeg UDP timeout, retrying with TCP callback

我正在使用 FFmpeg 在 iOS 应用中阅读一些 RTSP 流。如果防火墙或其他服务阻止网络通过 UDP 接收,FFmpeg 会很好地返回到通过 TCP 读取。我的问题是:如何通知我回退到 TCP 已发生?我需要知道应用程序是否正在通过 UDPTCP 读取流,并且仍然让 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 实例。