如何在播放另一个VideoView B时预播视频视频 – Android

如何在播放另一个VideoView B时预播视频视频 – Android,第1张

概述我有兴趣在VideoView B播放时能够“预缓冲”VideoView A.这可能吗? >我有两个VideoView实例. >在给定时间只会显示一个VideoView,占据手机的整个屏幕. >目的是在从VideoView A和VideoView B切换时减少“黑屏”. >该应用程序一个接一个地播放视频列表. 在2015年1月19日添加了以下代码 下面的代码抓取每个玩家的MediaPlayer的引用 我有兴趣在VIDeoVIEw B播放时能够“预缓冲”VIDeoVIEw A.这可能吗?

>我有两个VIDeoVIEw实例.
>在给定时间只会显示一个VIDeoVIEw,占据手机的整个屏幕.
>目的是在从VIDeoVIEw A和VIDeoVIEw B切换时减少“黑屏”.
>该应用程序一个接一个地播放视频列表.

在2015年1月19日添加了以下代码

下面的代码抓取每个玩家的MediaPlayer的引用.当MediaPlayer A开始渲染时,MediaPlayer B将调用stop(),release(),setDataSource(url),prepareAsync().当MediaPlayer A完成时,Media Player B将调用start().

public class PrebufferingActivity extends Activity {    private VIDeoVIEw player1;    private VIDeoVIEw player2;    private MediaPlayer mediaPlayer1;    private MediaPlayer mediaPlayer2;    public static final String URL_1 = "sample1.mp4";    public static final String URL_2 = "sample2.mp4";    public boolean FirsT_TIME = true;    @Suppresslint("NewAPI")    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_prebuffering);        player1 = (VIDeoVIEw) findVIEwByID(R.ID.vIDeoPlayer1);        player2 = (VIDeoVIEw) findVIEwByID(R.ID.vIDeoPlayer2);        player1.setontouchListener(new OntouchListener(){            @OverrIDe            public boolean ontouch(VIEw v,MotionEvent event) {                // Todo auto-generated method stub                return false;            }        });        player2.setontouchListener(new OntouchListener(){             @OverrIDe             public boolean ontouch(VIEw v,MotionEvent event) {                // Todo auto-generated method stub                return false;             }        });        player1.setonCompletionListener(new OnCompletionListener(){            @OverrIDe            public voID onCompletion(MediaPlayer mp)            {                mediaPlayer2.start();                // Toggle visibility. Player1 is completed. HIDe Player1. Show Player2.                player2.setVisibility(VIEw.VISIBLE);                player1.setVisibility(VIEw.INVISIBLE);            }        });        player1.setonInfoListener(new OnInfoListener(){            @OverrIDe            public boolean onInfo(MediaPlayer mp,int what,int extra)             {                if(what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START)                {                    mediaPlayer2.stop();                    mediaPlayer2.release();                    try {                        mediaPlayer2.setDataSource(URL_2);                        mediaPlayer2.prepareAsync();                    } catch (Exception e) {                        e.printstacktrace();                    }                 }                return false;            }        });        player1.setonPreparedListener(new OnPreparedListener(){            @OverrIDe            public voID onPrepared(MediaPlayer mp)          {                mediaPlayer1 = mp;                if(FirsT_TIME == true) {                    mediaPlayer1.start();                    player1.requestFocus();                    FirsT_TIME = false;                }            }        });        player2.setonCompletionListener(new OnCompletionListener(){            @OverrIDe            public voID onCompletion(MediaPlayer mp)            {                mediaPlayer1.start();                player1.requestFocus();                // Toggle visibility. Player2 is completed. HIDe Player2. Show Player1.                player1.setVisibility(VIEw.VISIBLE);                player2.setVisibility(VIEw.INVISIBLE);            }        });        player2.setonInfoListener(new OnInfoListener(){            @OverrIDe            public boolean onInfo(MediaPlayer mp,int extra)             {                if(what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START)                {                    // Prepare Player 2                    mediaPlayer1.stop();                    mediaPlayer1.release();                    try {                        mediaPlayer1.setDataSource(PrebufferingActivity.URL_1);                        mediaPlayer1.prepareAsync();                    } catch (Exception e) {                        e.printstacktrace();                    }                 }                return false;            }        });        player2.setonPreparedListener(new OnPreparedListener(){            @OverrIDe            public voID onPrepared(MediaPlayer mp) {                mediaPlayer2 = mp;            }        });        // Player 1        player1.setMediaController(new MediaController(this));        player1.setVIDeoURI(Uri.parse(URL_1));        // Player 2        player2.setMediaController(new MediaController(this));        player2.setVIDeoURI(Uri.parse(URL_2));    }
解决方法 假设您使用MediaPlayer在VIDeoVIEw中处理视频的播放,您可以使用prepareAsync()方法来实现这一点. prepareAsync()方法基本上执行与prepare()相同的功能,该功能用于缓冲和准备视频,但它可以在后台异步完成.

编辑

我做了类似的事情,但实际上我使用的是SurfaceVIEw.要处理另一个流,只需创建另一个MediaPlayer实例.以下示例将创建两个MediaPlayer实例并缓冲第一个视频.在准备好第一个视频后,第二个视频将被异步缓冲.然后将第一个MediaPlayer绑定到SurfaceVIEw,并启动第一个视频.当第一个视频播放完毕后,将释放相应的MediaPlayer实例,附加辅助实例,并自动启动第二个视频.以下示例代码已经过测试并且工作正常:

public class StreamingActivity extends Activity implements SurfaceHolder.Callback,MediaPlayer.OnPreparedListener,MediaPlayer.OnCompletionListener{    MediaPlayer     mediaPlayerPrimary;    MediaPlayer     mediaPlayerSecondary;    SurfaceHolder   surfaceHolder;    SurfaceVIEw     surfaceVIEw;    String          vIDeoSourcePrimary = "vIDeoSourcePrimaryURL";    String          vIDeoSourceSecondary = "vIDeoSourceSecondaryURL";    @OverrIDe    protected voID onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.streaming_activity_layout);        /** Create SurfaceVIEw */        surfaceVIEw = (SurfaceVIEw) findVIEwByID(R.ID.surface_vIEw);        surfaceHolder = surfaceVIEw.getHolder();        surfaceHolder.addCallback(this);    }    @OverrIDe    public voID surfaceCreated(SurfaceHolder arg0)    {        try        {            /** Create MediaPlayer(s) */            mediaPlayerPrimary = new MediaPlayer();            mediaPlayerSecondary = new MediaPlayer();            /** Attach primary MediaPlayer to SurfaceVIEw */            mediaPlayerPrimary.setdisplay(surfaceHolder);            /** Set sources */            mediaPlayerPrimary.setDataSource(vIDeoSourcePrimary);            mediaPlayerSecondary.setDataSource(vIDeoSourceSecondary);            /** Prepare MediaPlayer(s) */            mediaPlayerPrimary.prepare();            mediaPlayerSecondary.prepareAsync();            /** Set Listeners */            mediaPlayerPrimary.setonPreparedListener(this);            mediaPlayerPrimary.setonCompletionListener(this);            mediaPlayerSecondary.setonPreparedListener(this);            mediaPlayerSecondary.setonCompletionListener(this);            /** Set audio stream type */            mediaPlayerPrimary.setAudioStreamType(AudioManager.STREAM_MUSIC);            mediaPlayerSecondary.setAudioStreamType(AudioManager.STREAM_MUSIC);        }        catch (Exception e)        {            e.printstacktrace();        }    }    @OverrIDe    public voID surfaceChanged(SurfaceHolder arg0,int arg1,int arg2,int arg3)    {    }    @OverrIDe    public voID surfaceDestroyed(SurfaceHolder arg0)    {    }    @OverrIDe    public voID onPrepared(MediaPlayer mp)    {        if (mp == mediaPlayerPrimary)        {            /** First vIDeo ready,start playback */            mediaPlayerPrimary.start();        }        else if (mp == mediaPlayerSecondary)        {            /** Second vIDeo is ready */        }    }    @OverrIDe    public voID onCompletion(MediaPlayer mp)    {        /** First vIDeo is completed,start second vIDeo */        mediaPlayerPrimary.release();        mediaPlayerSecondary.setdisplay(surfaceHolder);        mediaPlayerSecondary.start();    }    @OverrIDe    public boolean onCreateOptionsMenu(Menu menu)    {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.streaming_activity_menu,menu);        return true;    }    @OverrIDe    public boolean onoptionsItemSelected(MenuItem item)    {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button,so long        // as you specify a parent activity in AndroIDManifest.xml.        int ID = item.getItemID();        //noinspection SimplifiableIfStatement        if (ID == R.ID.action_settings)        {            return true;        }        return super.onoptionsItemSelected(item);    }}
总结

以上是内存溢出为你收集整理的如何在播放另一个VideoView B时预播视频视频 – Android全部内容,希望文章能够帮你解决如何在播放另一个VideoView B时预播视频视频 – Android所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1127749.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存