gpt4 book ai didi

android - 将 native fd int 从可打开的 URI 传递到 FFMPEG

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:55:40 28 4
gpt4 key购买 nike

我正在尝试从存储访问框架的 CATEGORY_OPENABLE URI 打开文件描述符。我首先尝试使用 sdcard 上的文件,我已经可以使用 _data 列将其解析为文件路径并打开(我试图避免这样做,而是使用文件描述符).

我得到了这样的原生 int fd:

int fd = getContentResolver().openFileDescriptor(data.getData(), "r").detachFd();

然后在 C++ 中,我试图像这样打开它,这个想法来自 How to properly pass an asset FileDescriptor to FFmpeg using JNI in Android :

pFormatCtx = avformat_alloc_context();
pFormatCtx->iformat = av_find_input_format("mp3");

char path[50];
sprintf(path, "pipe:%d", fd);

int e;
if(e=(avformat_open_input(&pFormatCtx,path,NULL,NULL)!=0)){
av_strerror(e, path, 50);
return error;
}

这会从 avformat_open_input 产生“未知错误”。如果我使用上面链接到 FileDescriptor 对象的 jni 方法 jniGetFDFromFileDescriptor 来获取 int fd,也会发生同样的事情。如何在不使用文件路径的情况下使用 FFMPEG 正确打开可打开的 URI?

最佳答案

我的项目 ( FFmpegMediaMetadataRetriever) 实现了这一点。参见 this gistfull file在这里。

注意:确保您构建的 FFmpeg 启用了管道协议(protocol)!

我使用了 avformat_open_inputdup() 文件描述符并确保通过以下方式设置偏移量:

 if (state->offset > 0) {
state->pFormatCtx = avformat_alloc_context();
state->pFormatCtx->skip_initial_bytes = state->offset;
}

关于android - 将 native fd int 从可打开的 URI 传递到 FFMPEG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43815688/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com