Nik*_*man 33 android media-player
我一直在试图让MediaPlayer类尝试在Android 2.1上播放h.264编码的视频.我的代码很简单:
AssetFileDescriptor fileDescriptor = getResources().openRawResourceFd(R.raw.my_movie);
introMoviePlayer = new MediaPlayer();
introMoviePlayer.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getDeclaredLength());
introMoviePlayer.prepare();
Run Code Online (Sandbox Code Playgroud)
这总是会prepare()在文本中引发异常java.io.IOException: Prepare failed.: status=0x1.我通过使用MediaPlayer.create()一个URI 获得了更多的信息,这个URI也会抛出prepare(),实际上是由MediaPlayer.create()消息引起的Command PLAYER_PREPARE completed with an error or info PVMFErrResourceConfiguration.
相同的代码在Froyo(2.2)中完美运行.视频本身在视频播放器应用中播放得很好.有没有人可能有一个有用的提示可能有助于解决这个问题?
编辑:仍然没有解决方案 - 非常令人沮丧的问题.但是,我发现通过创建VideoView和设置原始视频的URI工作.这非常令人费解,因为通过MediaPlayer类发送完全相同的URI将会抛出.
小智 29
这是我的解决方案:
MediaPlayer mediaPlayer = new MediaPlayer();
FileInputStream fis = null;
try {
File directory = new File("android.resource://com.example.myapp/raw/");
fis = new FileInputStream(directory);
mediaPlayer.setDataSource(fis.getFD());
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.prepare();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException ignore) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
Rya*_*ner 18
我不知道这是不是你的问题,但我刚刚找到了Tuszy所描述的问题的解决方案.我可以从外部存储中读取我正在创建的文件,但不能从Cache中读取.
解决方案是写入文件时的读写权限不同.
请在我发现的这个博客中看到这个优秀的解释.
http://blog.weston-fl.com/android-mediaplayer-prepare-throws-status0x1-error1-2147483648/
我知道我迟到了,但希望这有助于其他人.我通过设置一个setOnCompletionListener在媒体播放后显式释放MediaPlayer对象的回调来解决这个问题.
我不能赞成这个解决方案,因为它最初是由Ronny发布的: 你如何检测声音文件何时完成?
但是,因为这是我搜索Android +失败状态0x1的第一个答案,这里是我的代码,为我解决了这个问题:
public void playSound(String soundPath){
MediaPlayer m = new MediaPlayer();
m.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
try {
AssetFileDescriptor descriptor = mContext.getAssets().openFd(soundPath);
m.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(),
descriptor.getLength());
descriptor.close();
m.prepare();
m.setVolume(100f, 100f);
m.setLooping(false);
m.start();
} catch (Exception e) {
//Your catch code here.
}
}
Run Code Online (Sandbox Code Playgroud)
如果其他人在从远程 URL 读取时遇到困难,
我的网址都是不安全的(即 http 而不是 https)
因为我无法访问服务器网址(第 3 方)
我必须在 android 清单中添加以下内容。
<application
...
android:usesCleartextTraffic="true"
...
</application>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62642 次 |
| 最近记录: |