1. 程式人生 > >java.lang.RuntimeException: setDataSource failed: status = 0x80000000

java.lang.RuntimeException: setDataSource failed: status = 0x80000000

獲取視訊的時長的方法:

try {
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    retriever.setDataSource(path);
    String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
    KLog.e("短視訊時間 ============"+ time);
    
}catch (Exception e){
    KLog.e(e.toString());
}

使用這個方法報錯:java.lang.RuntimeException: setDataSource failed: status = 0x80000000

解決方案:

1.網上大部分解釋出錯原因是沒有網路請求許可權,加上網路許可權就可以解決

<uses-permission android:name="android.permission.INTERNET" />

2.網上小部分解決方案是將retriever.setDataSoruce(path)修改如下:

  MediaMetadataRetriever retriever = new MediaMetadataRetriever();
FileInputStream inputStream = new FileInputStream(new File(path).getAbsolutePath()); retriever.setDataSource(inputStream.getFD()); String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); KLog.e("短視訊時間 ============"+ time);

3.如果上面兩種方案無法解決,可能是遇到同我一樣的問題了(自己埋的坑自己跳),

場景:使用MediaRecorder錄製短視訊,結束錄後,馬上通過path獲取短視訊的時長。這樣也會導致報錯(如標題);

原因:我在MediaRecorder.release() 之前呼叫了獲取時長的方法。

解釋:MediaRecorder.release()沒有呼叫前,視訊檔案還屬於不完整狀態。

解決方案:在MediaRecorder.release()結束後在呼叫獲取時長的方法。