Frage

Ich entwickle eine Android -App. Meine Anforderung ist, dass ein RTSP -Streaming -Server auf Android implementiert wird. Es muss Live -Stream -Video und Audio mithilfe von mithilfe von Live -Stream -Stream MediaRecorder. Eine weitere Anforderung ist, dass ich Live555 als Streaming -Server verwenden muss. Was ich bekomme von MediaRecorder ist im MP4- oder 3GP -Format. Live555 kann nicht in der Lage sein, beide zu streamen. Aber es kann Audio streamen, wenn ich es nur im 'RAW_AMR' -Format aufgenommen habe. Da Live555 das 'MPG' -Format für Streaming unterstützt, habe ich mich entschlossen, jemanden in Mitte zu bringen, der 'MP4' oder '3GP' in 'MPG' konvertieren kann, und ich habe mich für FFMPEG entschieden.

Ich habe Live555 und FFMPEG nach Android portiert. FFMPEG kann die Datei konvertieren, die von aufgezeichnet wurde MediaRecorder Sobald es fertig ist. Das Problem ist jedoch, dass FFMPEG es nicht gleichzeitig tun kann. Das heißt, FFMPEG kann die Datei während der Aufzeichnung nicht konvertieren. Es zeigt an Operation not permitted Error. Ich habe dasselbe auf meinem Linux -Computer versucht, mit VLC zum Aufnehmen anstelle von MediaRecorder auf Android. Das Ergebnis ist gleich. FFMPEG kann nach Abschluss der Aufnahme konvertieren und während der Aufnahme nicht dasselbe tun.

Hier ist der Befehl ffmpeg, den ich in meiner Linux -Box herausgegeben habe:

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

Wo test.mp4 ist die Datei, in die VLC aufnimmt mp4 Format. und test.mpg ist meine Zieldatei. Das Folgende ist die Ausgabe von FFMPEG am Terminal.

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

Würde mir bitte jemand sagen, was das Problem verursacht? Oder ist das obige Szenario von FFMPEG möglich. Das heißt, ist FFMPEG in der Lage, die Konvertierung gleichzeitig mit der Aufnahme durchzuführen? Wenn FFMPEG nicht möglich ist, würden Sie bitte alternative Lösungen vorschlagen?

Hinweis: Ich setze eine C Tag, denn wenn es möglich ist, wenn es sich um eine Optimierung in C auf ffmpeg handelt, bin ich bereit (ich möchte die Lösung so sehr). Aber bitte geben Sie einige Hinweise in die richtige Richtung.

War es hilfreich?

Lösung

Beide 3gp und mp4 Zu den Formaten gehören Moov -Atom (Datenblock), das beim Abschluss der Datei geschrieben wird. Bis dahin ist die Datei unvollständig.

Sie können verwenden FLV als "mittleres" Format. Andere Formate, die Live -Streaming unterstützen, können ebenfalls verwendet werden. Möglichkeit -re kann hilfreich sein, um den Encoder bei Bedarf mit der Stream -Rate zu betreiben.

Siehe auch Ist es möglich, eine Ausgabevideodatei von einem Encoder abzuspielen, während sie codiert wird?.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top