我使用以下代码在Android模拟器中显示视频文件,当视频文件存储在SD卡中时,它可以正常工作。但是,当我给视频的任何URL提供代码时,代码不起作用。
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.View;
import android.widget.*;
public class playerActivity extends Activity
{
Button b;
VideoView preview;
SurfaceHolder holder;
MediaPlayer mp;
private String path = "/data/data/payoda.android/funny.mp4";
//private String path = "http://www.daily3gp.com/vids/3.3gp";
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
preview=(VideoView)findViewById(R.id.surface);
holder=preview.getHolder();
b=(Button)findViewById(R.id.cmd_play);
b.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
try
{
mp=new MediaPlayer();
mp.setDataSource(path);
mp.setScreenOnWhilePlaying(true);
mp.setDisplay(holder);
mp.prepare();
mp.start();
}
catch(Exception e)
{
}
}
});
}
}
The Exception thorwn是:
prepare failed:
status=0xC8
LogCat的详细信息是:
09-16 12:16:36.729: ERROR/PlayerDriver(542): Command PLAYER_INIT completed with an error or info PVMFErrContentInvalidForProgressivePlayback
09-16 12:16:36.739: ERROR/MediaPlayer(2867): error (200, -27)
在上面的代码中,如果更改路径变量,则模拟器屏幕为黑色,单个按钮。可能我需要做更多的事情来显示远程URL中的视频,我不知道该怎么做。任何人都有关于这个的想法请帮助我。
答案 0 :(得分:4)
首先,请勿使用模拟器测试视频播放。它处理视频播放的能力非常有限。使用实际的Android设备。
其次,在遇到多媒体问题时,请始终检查LogCat(Eclipse中的adb logcat
,DDMS或DDMS透视图)以获取警告。 OpenCORE-- Android使用的多媒体引擎 - 倾向于将错误级别的条件记录为警告。
例如,您的视频文件可能未设置为渐进式下载,这是HTTP流式传输所必需的。在Linux上,您可以通过安装MP4Box并运行MP4Box -hint <file>
来修补MP4视频以进行渐进式下载。
答案 1 :(得分:2)
你应该在模拟器中创建一个Sdcard 然后将您的eclipse窗口视图更改为DDMS 选择mnt / sdcard的路径并将文件推送到设备上 动作按钮是DDMS的右上角,它是一个电话图标
然后更改.java路径
private String path = "mnt/sdcard/funny.mp4";
你应该继续努力。
答案 2 :(得分:0)
您还应该使用prepareAsync()方法而不是prepare()。使用prepare()是一个阻塞调用(UI被锁定),而prepareAsync不是阻塞调用。