Joh*_*ang 26 video android media-player
通过实现OnCompletionListener将数据源设置为不同的文件,我可以连续播放视频.没有问题.我调用reset()和prepare()就好了.
我无法弄清楚的是,如何消除数据源更改和新视频启动之间的1-2秒间隙屏幕闪烁.差距显示黑屏,我没有找到任何方法绕过它.
我已经尝试将父视图的背景设置为图像,但它设法绕过它.即使SurfaceView是透明的(默认情况下也是这样).我也尝试同时播放多个视频文件,并在一个结束而另一个应该启动时切换媒体播放器的显示.
我尝试的最后一件事是在后台显示第二个视图,我在视频"准备"时暂时显示,并在视频准备好开始时将其删除.这也不是很无缝.
有没有办法摆脱这种差距.在循环中运行视频非常有效,并且完全符合我的要求,除了它正在查看相同的视频而不是播放我选择的不同视频.
main.xml中
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:background="@drawable/background"
android:layout_height="fill_parent">
<SurfaceView
android:id="@+id/surface"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center">
</SurfaceView>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
Player.java
public class Player extends Activity implements
OnCompletionListener, MediaPlayer.OnPreparedListener, SurfaceHolder.Callback {
private MediaPlayer player;
private SurfaceView surface;
private SurfaceHolder holder;
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.main);
surface = (SurfaceView)findViewById(R.id.surface);
holder = surface.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void onCompletion(MediaPlayer arg0) {
File clip = new File(Environment.getExternalStorageDirectory(),"file2.mp4");
playVideo(clip.getAbsolutePath());
}
public void onPrepared(MediaPlayer mediaplayer) {
holder.setFixedSize(player.getVideoWidth(), player.getVideoHeight());
player.start();
}
private void playVideo(String url) {
try {
File clip = new File(Environment.getExternalStorageDirectory(),"file1.mp4");
if (player == null) {
player = new MediaPlayer();
player.setScreenOnWhilePlaying(true);
}
else {
player.stop();
player.reset();
}
player.setDataSource(url);
player.setDisplay(holder);
player.setOnPreparedListener(this);
player.prepare();
player.setOnCompletionListener(this);
}
catch (Throwable t) {
Log.e("ERROR", "Exception Error", t);
}
}
Run Code Online (Sandbox Code Playgroud)
我也有以下链接概述的相同问题
但是,如果您尝试使用Android 4.0+(ICS),则不会发生此问题。我开始将VideoView.java和MediaPlayer.java从4.0移植到我的应用程序,但这似乎很复杂,到目前为止没有运气。基本上,这似乎是旧版本的本机代码中的错误。
在浪费了太多时间试图弄清楚如何在没有“间隙”的情况下播放连续视频之后,我倾向于不可能。当然,除非您能够深入到本机级别并实现自己的播放器,否则 Android 的媒体播放器目前根本不支持无缝播放。
| 归档时间: |
|
| 查看次数: |
9212 次 |
| 最近记录: |