現在、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ストリームを開くと、次を介して行うことができることが判明...