如何使用FFmpeg库获取以.264为前缀的编解码器视频文件的持续时间?

时间:2018-08-16 12:11:52

标签: c++ ffmpeg

我将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

您对我有什么建议吗?

2 个答案:

答案 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