while (av_read_frame(pFormatCtx, packet) >= 0) {
if (packet->stream_index == videoindex) {
ret = avcodec_decode_video2(pCodecCtx, pFrame, &got_picture, packet);
if (ret < 0) {
printf("Decode Error.\n");
return -1;
}
printf("Succeed to decode 1 frame! %d\n", tt++);
}
av_packet_unref(packet);
}
我正在使用ffmpeg在Android中提供实时音频/视频RTSP流。
但是我永远无法阻止av_read_frame功能。 Android日志:
I/libnav: Succeed to decode 1 frame! 70
I/libnav: Succeed to decode 1 frame! 71
I/libnav: Succeed to decode 1 frame! 72
I/libnav: Succeed to decode 1 frame! 73
I/libnav: Succeed to decode 1 frame! 74
I/libnav: Succeed to decode 1 frame! 75
blocking forever...
因此我 已经尝试了一些代码。我已将关于ffmpeg的Android jni代码复制到pc(ubuntu)。我的代码上面没有任何阻塞。
Succeed to decode 21122 frame!
Succeed to decode 21123 frame!
Succeed to decode 21124 frame!
...
without blocking ...
我猜这个问题是关于延迟的。我在android jni中删除了avcodec_decode_video2调用。我的代码没有任何阻塞地执行。
我找到了ffmpeg av_read_frame() need very long time to stop个帖子。但它无法帮助我。
如果您遇到类似问题,请帮助我。