MediaMuxer-JNI: Fail to get File Status Flags err: Bad file descriptor

需求是在Android9使用MediaMuxer合成h264+aac的流,合成mp4文件。

因为在这个Android9的平台上,用以前的new File形式创建文件都被拒绝掉了,所以我用了DocumentFile的形式,但是这个时候,这个MediaMuxer就要用到FileDescriptor来生成文件,

 

但是运行时就提示这样的错误

Fail to get File Status Flags err: Bad file descriptor
System.err: java.lang.IllegalArgumentException: Invalid file descriptor
System.err:     at android.media.MediaMuxer.nativeSetup(Native Method)
System.err:     at android.media.MediaMuxer.setUpMediaMuxer(MediaMuxer.java:359)
System.err:     at android.media.MediaMuxer.<init>(MediaMuxer.java:351)

提示这个

IllegalArgumentException: Invalid file descriptor

 查找了很多资料都无法解决,这个是我的代码段:

mMediaMuxer = new MediaMuxer(createFileDescriptor(context, destFile), MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);

........

public static FileDescriptor getFileDescriptor(Context context, File destFile) {
        FileDescriptor fd = null;
        try {
            DocumentFile file = DocumentsUtils.getDocumentFile(destFile, false, context);
                if (file != null && file.canWrite()) {
                    ParcelFileDescriptor out = context.getContentResolver().openFileDescriptor(file.getUri(), "rw");
                    fd = out.getFileDescriptor();
                    }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return fd;
    }

 

有人遇到过吗,很多天都没有找到办法= =

不是吧,我用String路径就可以啊
你说的new File形式创建文件被拒绝这个问题才是要解决的

是不是读写权限的问题?