안드로이드 개발 질문/답변
(글 수 45,052)
남은그루터기님 강좌 덕분에 빌드 잘 하고
영상 파일도 잘 출력되는것을 확인 하였습니다.
그리고 RTSP로도 영상이 나오는것을 확인 하였습니다.
다만 영상이 나오다가 화면이 깨지면서 죽어 버립니다.
로그찍어서 추적해본 결과 아래 함수의 while 문 안에 av_read_frame 부분에서 음수 값을 리턴하면서 죽는것 같습니다.
int decodeFrame()
{
int frameFinished = 0;
AVPacket packet;
while ( (frameFinished = av_read_frame(gFormatCtx, &packet)) >= 0) {
if (packet.stream_index == gVideoStreamIdx) {
avcodec_decode_video2(gVideoCodecCtx, gFrame, &frameFinished, &packet);
if (frameFinished) {
gImgConvertCtx = sws_getCachedContext(gImgConvertCtx,
gVideoCodecCtx->width, gVideoCodecCtx->height, gVideoCodecCtx->pix_fmt,
gVideoCodecCtx->width, gVideoCodecCtx->height, PIX_FMT_RGB565LE, SWS_BICUBIC, NULL, NULL, NULL);
sws_scale(gImgConvertCtx, gFrame->data, gFrame->linesize, 0, gVideoCodecCtx->height, gFrameRGB->data, gFrameRGB->linesize);
av_free_packet(&packet);
return 0;
} else {
return -2;
}
}
av_free_packet(&packet);
}
return frameFinished;
}
RTSP 영상 플레이 하신 분이나 비슷한 경험이 있으신 분들의 조언을 구하고자 합니다.




av_read_frame의 경우 이 더 이상 구할 패킷이 없을 경우에는음수 값을 반환하는데,
음수를 반환 후 죽는게 문제인듯 합니다. 반환값이 음수일 때는 플레이가 종료되게 변경하세요.