마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

FFmpeg RTSP 스트리밍 문제

0 추천

안녕하세요 안드로이드펍 가족님들..

현재 남은그루터기님 FFMPEG 공개 소스로 RTSP 를 스트리밍할려고합니다.

http://www.androidpub.com/1648388#comment_2535594

웹에서 스트리스받는건데요.

주소는 String fname = "http://www.wowza.com/_h264/BigBuckBunny_115k.mov";

이렇게 햇습니다 폰에있는 영상을 불러올때는 잘되구요.

리턴값을 가져 오니 -2 입니다.

 int openResult = openMovie(fname);

 Log.i("openError",String.valueOf(openResult));

 

BasicPlayer.c 

int openMovie(const char filePath[])

{

int i;

 

if (gFormatCtx != NULL)

return -1;

 

if (av_open_input_file(&gFormatCtx, filePath, NULL, 0, NULL) != 0)

return -2;

 

if (av_find_stream_info(gFormatCtx) < 0)

return -3;

 

for (i = 0; i < gFormatCtx->nb_streams; i++) {

if (gFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) {

gVideoStreamIdx = i;

 

break;

}

}

if (gVideoStreamIdx == -1)

return -4;

 

gVideoCodecCtx = gFormatCtx->streams[gVideoStreamIdx]->codec;

 

gVideoCodec = avcodec_find_decoder(gVideoCodecCtx->codec_id);

if (gVideoCodec == NULL)

return -5;

 

if (avcodec_open(gVideoCodecCtx, gVideoCodec) < 0)

return -6;

 

gFrame = avcodec_alloc_frame();

if (gFrame == NULL)

return -7;

 

gFrameRGB = avcodec_alloc_frame();

if (gFrameRGB == NULL)

return -8;

 

gPictureSize = avpicture_get_size(PIX_FMT_RGB565LE, gVideoCodecCtx->width, gVideoCodecCtx->height);

gVideoBuffer = (uint8_t*)(malloc(sizeof(uint8_t) * gPictureSize));

 

avpicture_fill((AVPicture*)gFrameRGB, gVideoBuffer, PIX_FMT_RGB565LE, gVideoCodecCtx->width, gVideoCodecCtx->height);

 

return 0;

}

rtsp스트리밍 된다고 들었는데.. 머 다른거 변경해야하나요?

사악미소님 말씀으로는 남은그루터기님은 네트워크 옵션이 빠졌다고 하네요 ㅜㅜ

이러면 다시 처음부터해야하나요 어렵네요

 

흠바바 1 (4,000 포인트) 님이 2013년 8월 22일 질문
흠바바 1님이 2013년 8월 22일 수정

1개의 답변

0 추천
제가 언제 네트워크가 빠졌다고 그랬는지는 모르겠지만.. 남은그루터기님 예제 코드 중

config.sh 파일에 --disable-network 이라는 부분이 있습니다. 이 부분을  --enable-network 로 변경하여 config 파일을 다시 만들어 NDK빌드하면 네트워크 코드가 들어갈겁니다.
사악미소 (65,330 포인트) 님이 2013년 8월 22일 답변
사악미소님 답변감사드립니다. 혹시 제 쪽지 보셧나요?
config.sh를 아래처럼 수정하여서 했는데도 안됩니다
그리고 다른분 소스보니까 아래 3개 메소드를 불러올수 있던데.. 남은그루터기 님소스에서는  아래소스를 불러올수가 없는데 아래에 네트워크 저게 선언되어야 하는거아닌가요.
그리구 사악미소님이 다른분 댓글다신거에 네트워크 기능없다고 노가다많이하여야 한다는 글이 있어서요 ㅜㅜ
http://www.androidpub.com/index.php?mid=android_dev_qna&search_target=user_id&search_keyword=pike&document_srl=2425060
av_register_all();
    avcodec_register_all();
    avformat_network_init();
export ANDROID_ROOT=/Users/kkokokkim14/Downloads/android-ndk-r9

./configure --target-os=linux \
--arch=arm \
--enable-cross-compile \
--cc=$ANDROID_ROOT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$ANDROID_ROOT/bin/arm-linux-androideabi- \
--extra-cflags="-marm -march=armv7-a -mfloat-abi=softfp -mfpu=neon" \
--extra-ldflags="-Wl,--fix-cortex-a8" \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--enable-network \
--disable-devices \
--disable-filters\
--enable-protocol=tcp \
--enable-demuxer=rtsp \
--enable-decoder=h264
오래전에 했던 것이라. 직접해보니 config.sh 부터가 실패했군요..
config.sh 실행해서 config.h 파일이 나와야 하는데. 남은그루터기님의 소스로는 생성이 안되네요. 0.8 버젼 소스를 받아 빠진 부분을 채워 넣으면 되겠지만.
전에 댓글에 단 것 처럼 다른 플레이어에서 미리 만들어놓은 소스를 그대로 가져와 사용하셔도 됩니다. 그리고 테스트 시 네트워크 퍼미션 꼭 주세요.^^
http://www.rockplayer.com/rp2/opensource.html (ROCK 플레이어)
https://sites.google.com/site/mxvpen/download ( MX 플레이어)
http://vpn.inisoft.co.kr:8000/public/DicePlayer/#TechnicalNote (Dice 플레이어)
사악미소님 메신저점가르쳐주실수 있나요 ㅜㅜ
아니면 어떤 채팅창이라도^^
사악미소님 너무 답변잘달아주셔서 감사합니다 ^^
님밖에 없네요 ㅋ 저같은 초보가 의지할곳은 ㅋ
다름이 아니라
http://www.rockplayer.com/rp2/opensource.html (ROCK 플레이어)
여기서 FFmpeg lib used by 1.7.0 and later for Android
이걸 다운받았습니다 그리고 기존에 있던데.  ffmpeg 폴더에 있는 데이터 다 지우고 다운받은 내용 붙여넣었습니다 그리고 ndk-build 안하고 임폴트했는데 똑같이안되네요 ㅜㅜ
전부 SO 로 빌드 됩니다. Android.mk 파일을 수정해서 a파일로 빌드를 시켜 야 됩니다. 갑자기 프로젝트를 받아 바로는 못 도와드리고 시간이 나면 컴파일된 소스를 보내드리겠습니다.
그렇게 해주시면 감사합니다 ㅜㅜ
아이폰에서는  쉽게 구현하였는데 안드로이드는 기초가 부족해서 어렵네요^^
좋은 하루 되세요
...