如何知道MediaRecorder何时完成将数据写入文件

Ste*_*ger 17 video android file mediarecorder

在进行实际录制之前,我们使用MediaRecorder使用setOutputFile()将视频录制到外部存储上的文件中.

一切正常,但主要问题是,一旦录制完成,我们就想开始在VideoView中播放录制的视频.

如何知道文件何时可以读取和播放?

Ron*_*nie 19

FileObserver课程完美地满足您的需求.这是文档.它易于使用.在写入后关闭观察文件时,将onEvent使用CLOSE_WRITE参数作为回调进行调用.

MyFileObserver fb = new MyFileObserver(mediaFile_path, FileObserver.CLOSE_WRITE);
fb.startWatching();

class MyFileObserver extends FileObserver {

    public MyFileObserver (String path, int mask) {
        super(path, mask);
    }

    public void onEvent(int event, String path) {
        // start playing
    }
}
Run Code Online (Sandbox Code Playgroud)

别忘了打电话stopWatching().

  • 使用`FileObserver`时的问题是它不像宣传的那样工作.它不监视单个文件,而是监视目录.因此,请监视目录以进行更改.在`onEvent(int event,String path)`中,受影响的实际文件的路径将作为`String`参数传递.然后,您可以将该路径与您感兴趣的文件的路径进行比较,并做出相应的响应.有关详细信息,请参阅http://stackoverflow.com/questions/16448002/android-fileobserver-monitors-only-top-directory. (5认同)

Ash*_*Ash 5

我们用以下算法解决了类似的问题:

while (file not complete)
    sleep for 1 sec
    read the fourth byte of the file
    if it is not 0 (contains 'f' of the 'ftyp' header) then
        file is complete, break
Run Code Online (Sandbox Code Playgroud)

关键点在于MediaRecorder在最后一刻编写了ftyp框.如果它到位,则文件完成.