получение кадров из rtsp потока ffmpeg - зависание в av_read_play - PullRequest
2 голосов
/ 08 мая 2020

Я пытаюсь использовать этот код для получения видеокадров из потока RTSP:

// Open the initial context variables that are needed
SwsContext *img_convert_ctx;
AVFormatContext* format_ctx = avformat_alloc_context();
AVCodecContext* codec_ctx = NULL;
int video_stream_index;
// Register everything
av_register_all();
avformat_network_init();
if (avformat_open_input(&format_ctx, argv[1],
                        NULL, NULL) != 0) {
    return EXIT_FAILURE;
}
if (avformat_find_stream_info(format_ctx, NULL) < 0) {
    return EXIT_FAILURE;
}
//search video stream
for (int i = 0; i < format_ctx->nb_streams; i++) {
    if (format_ctx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
        video_stream_index = i;
}

AVPacket packet;
av_init_packet(&packet);

//open output file
AVFormatContext* output_ctx = avformat_alloc_context();
AVStream* stream = NULL;

//start reading packets from stream and write them to file
av_read_play(format_ctx);    // <-- program is frozen in this API call

// Get the codec
AVCodec *codec = NULL;
cout << "avcodec_find_decoder" <<endl;
codec = avcodec_find_decoder(AV_CODEC_ID_H264);

// some more important stuff below ...

Когда я запускаю свою программу с файлом MP4, она работает правильно. Если я использую его с потоком RTSP H264, он go не удаляет av_read_play. Исходный двоичный файл ffmpeg также корректно работает с потоком RTSP. В чем может быть причина этого?

...