2012-04-24 8 views
1

現在、UDPマルチキャストRTSPストリームをデコードする必要があるアプリケーションを開発中です。現時点では、私は私が(簡潔にするために取り除かエラーチェックとクリーンアップコード)を経由してUDPストリームを開くためにFFMPEGを使用しようとしています、しかしUDPマルチキャストRTSPビデオストリームからの読み取り

ffplay -rtsp_transport udp_multicast rtsp://streamURLGoesHere 

経由ffplay使用してRTPストリームを表示することができます。

AVFormatContext* ctxt = NULL; 
av_open_input_file(
    &ctxt, 
    urlString, 
    NULL, 
    0, 
    NULL 
); 

av_find_stream_info(ctxt); 

AVCodecContext* codecCtxt; 

int videoStreamIdx = -1; 
for (int i = 0; i < ctxt->nb_streams; i++) 
{ 
    if (ctxt->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) 
    { 
     videoStreamIdx = i; 
     break; 
    } 
} 

AVCodecContext* codecCtxt = ctxt->streams[videoStreamIdx]->codec; 
AVCodec* codec = avcodec_fine_decoder(codecCtxt->codec_id); 
avcodec_open(codecCtxt, codec); 

AVPacket packet; 
while(av_read_frame(ctxt, &packet) >= 0) 
{ 
    if (packet.stream_index == videoStreamIdx) 
    { 
     /// Decoding performed here 
     ... 
    } 
} 

... 

このアプローチは、生のエンコードされたビデオストリームから成り、ファイル入力で正常に動作しますが、UDPマルチキャストRTSPストリームのために、それはav_open_input_file()上で実行チェックエラーが失敗しました。

avformat_open_input()を使用して
AVFormatContext* ctxt = avformat_alloc_context(); 

AVDictionary* options = NULL; 
av_dict_set(&options, "rtsp_transport", "udp_multicast", 0); 
avformat_open_input(
    &ctxt, 
    urlString, 
    NULL, 
    &options 
); 

... 

avformat_free_context(ctxt); 

このように代わり、目的の動作でav_open_input_file()結果の:それは、マルチキャストUDP RTSPストリームを開くと、次を介して行うことができることが判明...

答えて

6

を教えてください。私はav_open_input_file()が推奨されていませんいずれか、または、このように使用されることを意図していなかったことを推測している - おそらく後者より;)

関連する問題