1

我正在尝试提取的muxer部分MediaRecorder,所以我现在正在学习Android 4.2.2的源代码,无论如何,这并不重要。我在这里有一个问题。大约setOutputFile(String path)MediaRecorder.java.

的调用结果MediaRecorder.java

MediaRecorder.java
  +- android_media_MediaRecorder.cpp
       +- MediaRecorder.cpp
            +- MediaPlayerService.cpp
                 +- MediaRecorderClient.cpp
                      +- StagefrightRecorder.cpp

但在 中StagefrightRecorder.cpp,它说

status_t StagefrightRecorder::setOutputFile(const char *path) {
    ALOGE("setOutputFile(const char*) must not be called");
    // We don't actually support this at all, as the media_server process
    // no longer has permissions to create files.

    return -EPERM;
}

那我们怎样才能继续使用setOutputFile(String path)MediaRecorder?我真的不明白。

4

1 回答 1

3

In MediaRecorder.java,setOutputFileJava层本身处理,没有相应的本机实现。在Java实现中,路径存储在mPath.

prepare被调用时,会创建aFileOutputStream并将其传递给本机实现,setOutputFileFile Descriptor该实现中可以观察到。本机实现支持这种方法,即获取 a File Descriptor,因此,生成输出并将其存储到文件系统中。

因此,在诸如 之类的示例中MediaRecorderTest.java,可以观察到该MediaRecorder对象被初始化为string用于输出文件路径的 a。

于 2014-05-08T06:29:10.950 回答