我将FFmpeg库用于android ndk。运行.mp4格式的视频没有问题。实际上,我播放后缀为.264的视频文件。但是,当我运行.264格式的视频时,代码返回的负数就是-232132。
这是代码:
extern "C"
JNIEXPORT jint JNICALL
Java_com_lscodex_just_videoplayertesting2_H264Decode_getDuration(JNIEnv *env, jobject instance) {
AVFormatContext *formatContext = gvs->pFormatCtx;
if (NULL != formatContext) {
int durations = static_cast<jint>(formatContext->duration / AV_TIME_BASE);
logd("VIDEO DURATION ---> %d", durations);
return durations;
} else {
return -1;
}
}
输出为VIDEO DURATION ---> -2077252342
您对我有什么建议吗?
答案 0 :(得分:4)
我找不到对错误代码-2077252342
的引用。但是它无法确定.264的持续时间,因为.264没有/没有将持续时间编码到文件中。那就是容器的工作。如果帧速率恒定,则可以将帧速率乘以帧数以获得持续时间。即frame_count * (1/frames_per_second)
答案 1 :(得分:0)
一种方法是对原始h264流中的所有数据包持续时间求和,但这需要读取整个文件。
使用ffprobe进行以下操作:
ffprobe -of default=noprint_wrappers=1:nokey=1 -show_entries packet=duration_time -i file.264