Question

Je développe une application Android. Mon exigence est que pour mettre en œuvre un serveur de streaming RTSP sur android. Il doit flux vidéo et audio en direct capturées à l'aide MediaRecorder. Une autre exigence est que je dois utiliser LIVE555 comme serveur de streaming. Ce que je reçois de MediaRecorder est en format MP4 ou 3GP. LIVE555 ne peut pas en mesure de diffuser les deux. Mais il peut diffuser de l'audio si je l'ai enregistré uniquement au format « RAW_AMR ». Depuis le soutien de LIVE555 format « mpg » pour le streaming, j'ai décidé de mettre quelqu'un au milieu qui peut convertir « mp4 » ou « 3gp » à « mpg », et j'ai choisi ffmpeg.

J'ai porté LIVE555 et ffmpeg pour Android. ffmpeg est capable de convertir le fichier enregistré par MediaRecorder une fois qu'il est terminé. Mais le problème est que ffmpeg ne peut pas être en mesure de le faire en même temps. C'est, ffmpeg ne peut pas convertir le fichier en cours d'enregistrement. Il affiche une erreur de Operation not permitted. J'ai essayé la même chose sur ma machine Linux, en utilisant VLC pour enregistrer au lieu de MediaRecorder sur Android. Le résultat est le même. ffmpeg est capable de convertir une fois que l'enregistrement est terminé, et pas en mesure de faire la même chose lors de l'enregistrement.

Voici la commande ffmpeg Je publié sur mon linux:

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

test.mp4 est le fichier dans lequel VLC est l'enregistrement au format mp4. et test.mpg est mon dossier de destination. Ce qui suit est la sortie par ffmpeg sur la borne.

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

ce que quelqu'un s'il vous plaît dites-moi ce qui est à l'origine du problème? Ou est le scénario ci-dessus est possible par ffmpeg. Autrement dit, est ffmpeg est capable de faire la conversion en même temps que celle de l'enregistrement? S'il est impossible par ffmpeg, auriez-vous s'il vous plaît suggérer des solutions alternatives?

NOTE: Je suis en train une balise C car si possible par quelques ajustements en C sur ffmpeg, je suis prêt à le faire (je veux la solution mal). Mais s'il vous plaît fournir quelques conseils pour la bonne direction.

Était-ce utile?

La solution

Les deux formats 3gp et mp4 comprennent moov atome (bloc de données) qui est écrit lorsque le fichier est finalisé. Jusque-là le dossier est incomplet.

Vous pouvez utiliser FLV comme format « milieu ». D'autres formats qui prennent en charge la diffusion en direct peuvent être utilisés aussi. Option -re peut être utile de dire encodeur pour fonctionner à la vitesse de flux, si nécessaire.

Voir aussi Est-il possible de lire un fichier vidéo de sortie d'un codeur comme il est en cours de codage? .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top