FFMPEG - операция не разрешенная ошибка во время преобразования

StackOverflow https://stackoverflow.com/questions/9356960

Вопрос

Я разрабатываю приложение для Android. Мое требование состоит в том, чтобы реализовать потоковое сервер RTSP на Android. Он должен в прямом эфире видео и аудио, снятые с помощью MediaRecorder. Анкет Другим требованием является то, что я должен использовать Live555 в качестве потокового сервера. От чего я получаю MediaRecorder находится в формате MP4 или 3GP. Live555 не может транслировать оба. Но он может транслировать аудио, если я записал его только в формате 'RAW_AMR. С тех пор, как Live555 поддерживает формат «MPG» для потоковой передачи, я решил поставить кого -то в середину, который может преобразовать «MP4» или «3GP» в «MPG», и я выбрал FFMPEG.

Я перенес Live555 и FFMPEG в Android. FFMPEG может конвертировать файл, записанный MediaRecorder Как только он закончится. Но проблема в том, что FFMPEG не может сделать это одновременно. То есть FFMPEG не может преобразовать файл во время записи. Это показывает Operation not permitted ошибка. Я попробовал то же самое на своей машине Linux, используя VLC для записи вместо MediaRecorder на Android. Результат тот же. FFMPEG может конвертировать после завершения записи, и не может сделать то же самое во время записи.

Вот команда ffmpeg, которую я выпустила на своем ящике Linux:

ffmpeg -v 9 -loglevel 99 -i test.mp4 test.mpg

Где test.mp4 это файл, в который записывается VLC mp4 формат. а также test.mpg мой файл назначения. Ниже приведен выход FFMPEG на терминале.

ffmpeg version 0.8.9, Copyright (c) 2000-2011 the FFmpeg developers
  built on Feb  1 2012 18:29:27 with gcc 4.6.2 20111027 (Red Hat 4.6.2-1)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --enable-bzlib --enable-libcelt --enable-libdc1394 --enable-libdirac --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab --enable-avfilter --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
  libavutil    51.  9. 1 / 51.  9. 1
  libavcodec   53.  8. 0 / 53.  8. 0
  libavformat  53.  5. 0 / 53.  5. 0
  libavdevice  53.  1. 1 / 53.  1. 1
  libavfilter   2. 23. 0 /  2. 23. 0
  libswscale    2.  0. 0 /  2.  0. 0
  libpostproc  51.  2. 0 / 51.  2. 0
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1672600] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1672600] ISO: File Type Major Brand: isom
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1672600] moov atom not found
test.mp4: Operation not permitted

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

Примечание: я ставлю C Теги, потому что, если это возможно благодаря некоторой настройке в C на ffmpeg, я готов сделать это (я так сильно хочу решение). Но, пожалуйста, предоставьте некоторые указатели в правильном направлении.

Это было полезно?

Решение

Оба 3gp а также mp4 Форматы включают атом MOOV (кусок данных), который записывается при завершении файла. До тех пор файл неполный.

Вы можете использовать FLV как «средний» формат. Другие форматы, которые поддерживают прямую трансляцию, также могут использоваться. Вариант -re Может быть полезно сказать Encoder работать со скоростью потока, если это необходимо.

Смотрите также Можно ли воспроизводить выходной видеофайл из кодера, поскольку он кодируется?.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top