本文介绍了OnBufferingUpdate不会被调用的MediaPlayer中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我OnBufferingUpdate当我试图用我的MediaPlayer使用它永远不会被调用。我使用保存在SD卡我作为媒体来源的视频。我认为这是问题的根源,我想知道,如果OnBufferingUpdate仅适用于互联网流。在code我现在用的就是以下。

 公共类FullImageActivity扩展活动实现SurfaceHolder.Callback,在preparedListener,OnInfoListener,OnErrorListener,OnBufferingUpdateListener {私有静态最后弦乐TAG =MediaPlayer的狗屎;
MediaPlayer的播放器;
SurfaceView surfaceview;
SurfaceHolder surfaceHolder;
INT宽度;
INT高度;
DisplayImageOptions选择;
ViewPager viewpager;
字符串路径;
长ID;
的String [] =投影{GridviewData.ROWID,GridviewData.BITMAPPATH,GridviewData.VIDEOFILEPATH};
@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.full_image);    意向I = getIntent();    。ID = i.getExtras()getLong之(ID);
    PATH = i.getExtras()的getString(将videoPath);    surfaceview =(SurfaceView)findViewById(R.id.surfaceview);
    surfaceHolder = surfaceview.getHolder();
    surfaceHolder.addCallback(本);}公共无效的playVideo(){
    玩家=新的MediaPlayer();
    尝试{
        player.reset();
        player.setOnErrorListener(本);
        档案文件=新的文件(路径);
        的FileInputStream的InputStream =新的FileInputStream(文件);
        player.setDataSource(inputStream.getFD());        inputStream.close();
        player.setOnBufferingUpdateListener(本);
        player.setOnInfoListener(本);
        player.setOn preparedListener(本);
        player.setDisplay(surfaceHolder);
        。玩家prepareAsync();
    }赶上(抛出:IllegalArgumentException五){
        e.printStackTrace();
    }赶上(SecurityException异常五){
        e.printStackTrace();
    }赶上(IllegalStateException异常五){
        e.printStackTrace();
    }赶上(IOException异常五){
        e.printStackTrace();
    }}
@覆盖
保护无效的onPause(){
    surfaceview.setVisibility(View.GONE);
    如果(玩家!= NULL)
    {
        如果(player.isPlaying())
            player.stop();
        player.release();
        玩家= NULL;
    }
    super.onPause();
}
@覆盖
保护无效onResume(){
    surfaceview.setVisibility(View.VISIBLE);
    Log.i(TAG,在onResume);
    super.onResume();
}
@覆盖
保护无效的onStop(){
    super.onStop();
}
@覆盖
公共无效surfaceChanged(SurfaceHolder架,INT ARG1,ARG2 INT,INT ARG3){
    如果(玩家!= NULL)
    {
        尝试{
            Log.i(TAG,在表面的变化);
            player.setDisplay(surfaceHolder);
        }赶上(例外五){
            e.printStackTrace();
        }
    }
}
@覆盖
公共无效surfaceCreated(SurfaceHolder持有人){
    Log.i(TAG,在表面形成);
    的playVideo();
}@覆盖
公共无效surfaceDestroyed(SurfaceHolder为arg0){
        Log.i(TAG,表面破坏);
        如果(玩家!= NULL)
        {
            如果(player.isPlaying())
                player.stop();
            player.release();
            玩家= NULL;
        }}
@覆盖
在prepared(MediaPlayer的P)公共无效{
    player.start();}@覆盖
公共布尔的onError(MediaPlayer的为arg0,ARG1 INT,INT ARG2){
    Log.i(TAG,出现错误);
    返回false;
}
@覆盖
公共无效onBufferingUpdate(MediaPlayer的熔点,诠释百分比){    如果(百分比== 50){
    Log.i(TAG,在bufferingupdate);
    }}


解决方案

您已经回答了你自己的问题! :)

onBufferingUpdate()只要求资源被流在网络上,因此这将不会被要求对本地资源。

http://developer.android.com/reference/android/media/MediaPlayer.OnBufferingUpdateListener.html

From the source code:

这篇关于OnBufferingUpdate不会被调用的MediaPlayer中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-18 13:37