2012-02-20 8 views
0

Android 앱을 개발 중입니다. 내 요구 사항은 안드로이드에 rtsp 스트리밍 서버를 구현하는 것입니다. MediaRecorder을 사용하여 캡처 한 스트림 비디오 및 오디오를 라이브로 재생해야합니다. 또 다른 요구 사항은 live555를 스트리밍 서버로 사용해야한다는 것입니다. 내가 MediaRecorder에서 얻은 것은 MP4 또는 3GP 형식입니다. live555는 둘 다 스트리밍 할 수 없습니다. 그러나 'RAW_AMR'형식으로 만 녹음하면 오디오를 스트리밍 할 수 있습니다. Live555가 스트리밍을위한 'mpg'형식을 지원하기 때문에 중간에 mpg 또는 3gp를 mpg로 변환 할 수있는 사람을 배치하기로 결심했으며 ffmpeg를 선택했습니다.ffmpeg - 변환 도중 오류가 발생했습니다.

나는 live555와 ffmpeg를 android에 이식했습니다. ffmpeg가 완료되면 MediaRecorder에 의해 기록 된 파일을 변환 할 수 있습니다. 그러나 문제는 ffmpeg가 동시에 그것을 수행 할 수 없다는 것입니다. 즉, ffmpeg는 녹음하는 동안 파일을 변환 할 수 없습니다. Operation not permitted 오류가 표시됩니다. 내 리눅스 컴퓨터에서 동일한 시도, 안드로이드에 MediaRecorder 대신 기록 VLC를 사용합니다. 결과는 같습니다. ffmpeg는 레코딩이 끝나면 변환 할 수 있으며 레코딩 중에는 동일한 작업을 수행 할 수 없습니다. test.mp4 파일입니다

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

는 VLC는 mp4 형식으로 기록되는 : 여기

은 필자의 리눅스 박스에 발행는 FFmpeg 명령입니다. 내 대상 파일은 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로는 가능하지 않다면 다른 대안을 제안 해 주시겠습니까?

참고 : 나는 ffmpeg에서 C로 조정할 수 있다면, 내가 그럴 준비가되어 있기 때문에 (나는 그 끔찍한 해결책을 원한다) C 태그를 달고있다. 그러나 올바른 방향에 대한 조언을 해주십시오.

답변

2

3gpmp4 형식 모두 파일이 완성 될 때 기록되는 moov 아톰 (데이터 청크)을 포함합니다. 그때까지는 파일이 불완전합니다.

FLV을 "중간"형식으로 사용할 수 있습니다. 라이브 스트리밍을 지원하는 다른 형식도 사용할 수 있습니다. 옵션 -re은 필요한 경우 엔코더에 스트림 속도로 실행되도록 지시하는 데 도움이 될 수 있습니다.

도 참조하십시오. Is it possible to play an output video file from an encoder as it's being encoded?.

관련 문제