avformat_find_stream_info не заполняет nb_streams и потоки

Привет, это первый раз, когда я не смог найти ответ на свой вопрос, поэтому я впервые публикую здесь что-то.

У меня есть этот codeniplet, который является моей попыткой следовать нескольким учебникам, которые я нашел по получению некоторых базовых функциональных возможностей libav (работая на моем пути к извлечению видеокадров).

      1 #ifndef INT64_C
2 #define INT64_C(c) (c ## LL)
3 #define UINT64_C(c) (c ## ULL)
4 #endif
5
6 extern "C" {
7 #include <libavformat/avformat.h>
8 #include <libavcodec/avcodec.h>
9 #include <libavutil/avutil.h>
10 }
11 #include <iostream>
12 using namespace std;
13 #define FILENAME "/home/jon/Videos/testvideo.avi"14
15
16 int main(int argc, char** argv)
17 {
18     av_register_all();
19     AVFormatContext * avFormatPtr = avformat_alloc_context();
20     if (avformat_open_input(&avFormatPtr, FILENAME, NULL, NULL) != 0)
21         cout<<"Error while calling avformat_open_input (probably invalid file  format)"<<endl;
22     if (avformat_find_stream_info(avFormatPtr, NULL) < 0)
23         cout<<"Error while calling avformat_find_stream_info"<<endl;
24     av_dump_format(avFormatPtr,0,FILENAME,false);
25
26     cout<<"There are "<<avFormatPtr->nb_streams<<" streams"<<endl;
27     unsigned int video_codec_id = -1;
28     for (unsigned int i = 0; i < avFormatPtr->nb_streams; ++i) {
29         cout<<"loop iteration "<<i<<endl;
30         if(avFormatPtr->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO)
31         {
32             cout<<"Found video "<<i<<endl;
33             video_codec_id = i;
34         }
35         cout<<"debug point";
36     }
37
38     cout<<"fin"<<endl;
39}

Теперь проблема в том, что это всегда segfaults, вот вывод

    Input #0, avi, from '/home/jon/Videos/testvideo.avi':
Metadata:
encoder         : Lavf53.21.0
Duration: 00:01:51.08, start: 0.000000, bitrate: 17129 kb/s
Stream #0.0: Video: mpeg4 (Simple Profile), yuv420p, 1920x1088 [PAR 1:1 DAR 30:17], 25 tbr, 25 tbn, 25 tbc
There are 157328928 streams
loop iteration 0
Segmentation fault (core dumped)

Количество потоковых частей меняется каждый раз, заставляя меня думать, что он просто указывает на случайное место в памяти, поэтому, наверное, я что-то неправильно понимаю

    avformat_find_stream_info

Теперь это также всегда приводит к ошибкам в первой итерации цикла, поэтому я думаю, что потоки также не были инициализированы.
Заранее благодарю за любую помощь.

2

Решение

Интересно что av_dump_format() видит потоки правильно. Одна из возможных причин, по которой я могу подумать, заключается в том, что ваша установка Libav повреждена — вы используете заголовки и библиотеки с разными основными версиями.

Попробуйте распечатать LIBAVFORMAT_VERSION_INT против avformat_version(),

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]