Ffmpeg и docker приводят к averror_invaliddata

Я запускаю ffmpeg в контейнере докеров, и у меня возникла проблема.

У меня есть остроумная программа отладки (листинг ниже), которая просто открывает (и читает) test.mp4. Я открываю файл с помощью fopen (), читаю и распечатываю первые 32 байта. Значения совпадают и верны независимо от того, работает ли он в докере или локально. (т.е. файл доступен и доступен для чтения в контейнере докера) Однако, когда он попадает в avformat_open_input ():

Запуск локально: работает нормально. (а реальная программа его полностью декодирует)

Запуск в контейнере докера: вызов avformat_open_input () завершается ошибкой с AVERROR_INVALIDDATA. Это с test.mp4 в каталоге докеров.

Я немного заблудился. Ценю любые идеи.

Листинг тестовой программы: =========================================

#include <stdio.h>
extern "C" {
#include <libavformat/avformat.h>
}

int main (int argc, char **argv)
{
    int erc=0;
    AVFormatContext* srcFmtCtx = NULL;
    const char* srcFile = "test.mp4";

    // Simple read/echo
    FILE *f = fopen(srcFile, "rb");
    printf("fopen() %s  0x%lx\n", srcFile, (unsigned long)f);
    for (int i=0; i<4; i++) {
        long val;
        erc = fread(&val, 1, sizeof(long), f); 
        printf("[%d]0x%lx ", i, val);
    }   
    printf("\n");
    fclose(f);

    // Open source with ffmpeg libavformat utils
    printf("avformat_open_input(): %s\n", srcFile);
    if ((erc = avformat_open_input(&srcFmtCtx, srcFile, NULL, NULL)) < 0) {
        printf("avformat_open_input(): Returned AvError: %d\n", erc);
        exit(1);
    }   
    printf("avformat_open_input(): Returned normally\n");
    avformat_close_input(&srcFmtCtx);
}
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
469
1

Ответы 1

Кажется, моя проблема связана с несоответствием версий.

Мой док-контейнер создает образ ubuntu: 18.10 (последний доступный)

Этот образ предоставляет ffmpeg v3.3.5 (или около того), libavformat v57.83.100

avformat_version(): 3756900 Ident: Lavf57.83.100

Моя локальная установка ffmpeg - v4.0, libavformat v58.12.100

avformat_version(): 3804260 Build: 3804260 Ident: Lavf58.12.100

Одно из важных различий между этими версиями состоит в том, что avformat :: av_register_all () устарел и больше не используется. Я основывал свой код на новых источниках, и мне не было этого звонка. Однако более старые версии libavformat требуют этого. Таким образом, сбой в контейнере докеров, а не в моей локальной среде.

Другие вопросы по теме