我发现本教程关于ffmpeg我没有得到的是如何编码视频.
可以任何一个,请提供一个教程..解释为什么?(不,我不得到这个官方的一个,但我很乐意看到更多的评论)
考虑到公共文件路径通常在Android Q中不可用的事实,我试图找出如何使FFmpeg音频解码器与文件描述符一起工作,而不将文件复制到应用程序的私有目录中。
我们可以使用Android Q隐私更改中所述的方法轻松获取文件描述符,并且可以使用管道协议打开文件描述符,如将本地fd int从可打开的URI传递给FFMPEG中所述。但是,使用找不到结果,av_seek_frame并且使用的duration成员也不提供持续时间AVFormatContext。
有没有办法使用FFmpeg使用文件描述符进行搜索并检索持续时间?
我正在尝试使用FFmpeg,JNI和Java FileDescriptor在Android中检索元数据,但它并没有"正常工作".我知道FFmpeg支持管道协议,所以我试图以cat test.mp3 | ffmpeg i pipe:0编程方式进行搜索:" ".我使用以下代码从与Android应用程序捆绑在一起的资产中获取FileDescriptor:
FileDescriptor fd = getContext().getAssets().openFd("test.mp3").getFileDescriptor();
setDataSource(fd, 0, 0x7ffffffffffffffL); // native function, shown below
Run Code Online (Sandbox Code Playgroud)
然后,在我的本机(In C++)代码中,我通过调用以下方式获取FileDescriptor:
static void wseemann_media_FFmpegMediaMetadataRetriever_setDataSource(JNIEnv *env, jobject thiz, jobject fileDescriptor, jlong offset, jlong length)
{
//...
int fd = jniGetFDFromFileDescriptor(env, fileDescriptor); // function contents show below
//...
}
// function contents
static int jniGetFDFromFileDescriptor(JNIEnv * env, jobject fileDescriptor) {
jint fd = -1;
jclass fdClass = env->FindClass("java/io/FileDescriptor");
if (fdClass != NULL) {
jfieldID fdClassDescriptorFieldID = …Run Code Online (Sandbox Code Playgroud) ffmpeg ×3
android ×2
android-10.0 ×1
android-ndk ×1
c ×1
c++ ×1
encoding ×1
metadata ×1
pipe ×1
video ×1