Android 当我使用FFmpeg-Native和C++;文件
在下面的android.cpp文件中使用带有本机代码和write命令的FFmpeg最新版本(“Ada”),这是一个非常简单的函数VideogetDuration():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
#包括
#包括
#包括
#包括
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);
}