我是使用Eclipse进行android java编程的新手(我有一个.NET背景)并且无法在模拟器中播放视频(也没有在android htc欲望中播放)
我的设置:
我正在使用的视频是我用htc欲望录制的3gp视频。
我用
尝试了两种方法我的目标是Android 2.2(在模拟器中,以及我的htc愿望)
详细
1。 VideoView方法
getDuration总是返回-1,甚至在调用videoView.start()后,isPlaying为false。 这是我正在使用的代码:
public class MyActivity extends Activity
{
private static final String FileName = "VIDEO0015.3gp";
private static final String MyTag = "MyActivity";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
VideoView videoView = (VideoView) findViewById(R.id.videoView1);
videoView.setKeepScreenOn(true);
File clip=new File(Environment.getExternalStorageDirectory(), FileName);
if (clip.exists())
{
videoView.setVideoPath(clip.getAbsolutePath());
int duration = videoView.getDuration();
if (videoView.canSeekForward())
{
videoView.seekTo(duration/2);
}
videoView.start();
}
}
}
main.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<VideoView android:id="@+id/videoView1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</VideoView>
</LinearLayout>
2。 SurfaceView with MediaPlayer 通过这种方法,我得到正确的持续时间(大约15秒)并且isPlaying为真。 两者都没有被看到,视频播放也永远不会完成。
如果有人想检查,我会添加代码。
感谢您的帮助,我感到非常绝望。
谢
答案 0 :(得分:0)
我之前遇到过类似的问题。你试过'暗示'3gp视频吗?你可以看一下here。希望它会有所帮助。
答案 1 :(得分:0)
您好我以前写了一些测试视频观看程序。 我想也许你的视频文件路径错了? 这是我的测试代码,
public class VideoActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video_view_layout);
VideoView videoView = (VideoView) findViewById(R.id.VideoView);
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(videoView);
Uri video = Uri.parse("/sdcard/test_video.mp4");
videoView.setMediaController(mediaController);
videoView.setVideoURI(video);
videoView.start();
}
}
XML就是,
<?xml version="1.0" encoding="utf-8"?>
<VideoView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/VideoView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center">
</VideoView>
的AndroidManifest.xml,
<activity android:name=".VideoActivity"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.NoTitleBar"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
希望可以帮助你。
答案 2 :(得分:0)
如果您还没有找到解决方案,如果视频未处于播放状态,VideoView.getDuration()
将返回-1。视频在准备好之前不处于播放状态。因此,在设置URI后直接调用VideoView.getDuration()
并不能保证视频已经准备好。
我通过查看VideoView的来源找到了这个:
@Override
public int getDuration() {
if (isInPlaybackState()) {
return mMediaPlayer.getDuration();
}
return -1;
}
解决方案是将OnPreparedListener设置为VideoView,并在准备好视频后获取/使用持续时间。然后,您可以使用几乎相同的VideoView.getDuration()
或MediaPlayer.getDuration()
。
解决方案:
public class MyActivity extends Activity {
private static final String FileName = "VIDEO0015.3gp";
private static final String MyTag = "MyActivity";
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
VideoView videoView = (VideoView) findViewById(R.id.videoView1);
videoView.setKeepScreenOn(true);
File clip = new File(Environment.getExternalStorageDirectory(), FileName);
if (clip.exists()) {
videoView.setVideoPath(clip.getAbsolutePath());
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
int duration = videoView.getDuration();
if (videoView.canSeekForward()) {
videoView.seekTo(duration / 2);
videoView.start();
}
}
});
}
}
}