Android 当我使用FFmpeg-Native和C++;文件

Android 当我使用FFmpeg-Native和C++;文件,android,c++,ffmpeg,android-ffmpeg,libavformat,Android,C++,Ffmpeg,Android Ffmpeg,Libavformat,在下面的android.cpp文件中使用带有本机代码和write命令的FFmpeg最新版本(“Ada”),这是一个非常简单的函数VideogetDuration(): #包括 #包括 #包括 #包括 2) 3) (另见本项目) (四) 我还在下面的链接中添加了同样的问题: 输入文件的格式是什么?输入文件的格式是“.mp4”视频文件@Brianchen什么是错误的值?是否要打印持续时间的值?是的,当我运行此命令时,它将显示错误的值,表示视频显示在毫秒内的错误持续时间@BrianEnduration

在下面的android.cpp文件中使用带有本机代码和write命令的FFmpeg最新版本(“Ada”),这是一个非常简单的函数VideogetDuration():

#包括
#包括
#包括
#包括
2)
3) (另见本项目)
(四)

我还在下面的链接中添加了同样的问题:

输入文件的格式是什么?输入文件的格式是“.mp4”视频文件@Brianchen什么是错误的值?是否要打印持续时间的值?是的,当我运行此命令时,它将显示错误的值,表示视频显示在毫秒内的错误持续时间@BrianEnduration是指流的持续时间,单位为AV_TIME_BASE分数秒。所以如果你把持续时间除以AV_TIME_BASE,你得到的是一秒而不是一毫秒,你就失去了精度。
#include <jni.h>
#include <string>
#include <iostream>
#include <android/log.h>
#include <unistd.h>

extern "C" {
#include <libavutil/timestamp.h>
#include <libavformat/avformat.h>
#include <libavutil/display.h>
}

    /***
     *
     * @param input - the absolute path to file
     * @returns the duration of file in seconds
     *
     */
    extern "C"
    JNIEXPORT jint JNICALL
    Java_com_ffmpegjni_videoprocessinglibrary_VideoProcessing_getDuration(JNIEnv *env,
                                                                          jobject instance,
                                                                          jstring input_) {
        av_register_all();
        AVFormatContext *pFormatCtx = NULL;
        if (avformat_open_input(&pFormatCtx, jStr2str(env, input_), NULL, NULL) < 0) {
            throwException(env, "Could not open input file");
            return 0;
        }


        if (avformat_find_stream_info(pFormatCtx, NULL) < 0) {
            throwException(env, "Failed to retrieve input stream information");
            return 0;
        }

        int64_t duration = pFormatCtx->duration;


        avformat_close_input(&pFormatCtx);
        avformat_free_context(pFormatCtx);
        return (jint) (duration / AV_TIME_BASE);
    }