Я разрабатываю приложение для Android. Мое требование состоит в том, чтобы реализовать rtsp потоковый сервер на Android. Он должен транслировать потоковое видео и аудио, используя MediaRecorder
. Другое требование состоит в том, что я должен использовать live555 в качестве потокового сервера. То, что я получаю от MediaRecorder
, находится в формате MP4 или 3GP. live555 не может передать поток. Но он может передавать аудио, если я записал его только в формате RAW_AMR. Поскольку live555 поддерживает формат «mpg» для потоковой передачи, я решил поставить кого-то среднего, кто может конвертировать «mp4» или «3gp» в «mpg», и я выбрал ffmpeg.ffmpeg - операция не разрешена ошибка при конверсии
Я портировал live555 и ffmpeg на android. ffmpeg может преобразовать файл, записанный MediaRecorder
после его завершения. Но проблема в том, что ffmpeg не может сделать это одновременно. То есть, ffmpeg не может преобразовать файл во время записи. Он показывает ошибку Operation not permitted
. Я попробовал то же самое на своей машине linux, используя VLC для записи вместо MediaRecorder
на Android. Результат такой же. ffmpeg может конвертировать после завершения записи и не может делать то же самое во время записи.
Вот команда FFmpeg я выпустил на моей коробке Линукс:
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, я готов сделать это (я хочу, чтобы решение было плохо). Но, пожалуйста, предоставьте несколько указателей в правильном направлении.