1

のマルチプレクサ部分を抽出しようとしている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

ではMediaRecorder.java、対応するネイティブ実装なしでレイヤ自体setOutputFileで処理されます。実装では、Javaパスは に格納されます。JavamPath

prepare呼び出されると、aFileOutputStreamが作成され、ネイティブ実装に渡されます。ネイティブ実装はsetOutputFileFile Descriptor、この実装から観察できる asを受け取ります。この方法、つまり a の取り込みFile Descriptorはネイティブ実装でサポートされているため、出力が生成されてファイル システムに保存されます。

したがって、 などの例ではMediaRecorderTest.javaMediaRecorderオブジェクトがstring出力ファイル パスの で初期化されていることがわかります。

于 2014-05-08T06:29:10.950 に答える