FFmpeg UDP超时,使用TCP回调重试

时间:2015-02-10 10:31:49

标签: ios tcp ffmpeg udp rtsp

我正在使用RTSP在iOS应用中阅读一些FFmpeg流。如果防火墙或其他服务阻止网络通过UDP接收,FFmpeg很快就会回退到通过TCP进行阅读。我的问题是:如何通知我TCP的回退发生了?我需要知道该应用是否正在通过UDPTCP阅读该流,并且仍然让FFmpeg做好其后备。 这有回调吗?有没有办法获得正在使用的协议?

谢谢。

1 个答案:

答案 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;
}

其中_avFmtCtxAVFormatContext个实例。