Czytam trochę RTSP
strumieniowo w aplikacji na iOS za pomocą FFmpeg
. Jeśli zapora lub inne usługi uniemożliwiają odbiór sieci przez UDP
, FFmpeg
ładnie wraca do czytania za pośrednictwem TCP
. Moje pytanie brzmi: w jaki sposób mogę zostać powiadomiony, że powrót do TCP
stało się? Muszę wiedzieć, czy aplikacja odczytuje strumień za pośrednictwem UDP
lub TCP
i nadal pozwalam FFmpeg
zrób to dobrze. Czy jest do tego oddzwanianie? Czy istnieje sposób uzyskania używanego protokołu?
Dziękuję Ci.
Odpowiedzi:
2 dla odpowiedzi № 1Znalazłem rozwiązanie: po nawiązaniu połączenia można odczytać niższy protokół transportowy z AVFormatContext
„dane prywatne (priv_data
). Oto jak to robię:
-(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;
}
Gdzie _avFmtCtx
jest AVFormatContext
instancja.