android – 永远不会调用OnInfoListener

android – 永远不会调用OnInfoListener,第1张

概述我正在尝试收听我创建的媒体播放器的OnInfoListener,以便在缓冲开始和结束时获取. 由于某种原因,事件永远不会发生. 这是我的初始化代码 private void initPlayer(Surface s){ mPlayer = new MediaPlayer(); mPlayer.setSurface(s); mPlayer.setOnCompletionL 我正在尝试收听我创建的媒体播放器的OnInfoListener,以便在缓冲开始和结束时获取.

由于某种原因,事件永远不会发生.

这是我的初始化代码

private voID initPlayer(Surface s){    mPlayer = new MediaPlayer();    mPlayer.setSurface(s);    mPlayer.setonCompletionListener(this);    mPlayer.setonErrorListener(this);    mPlayer.setonInfoListener(this);    mPlayer.setonPreparedListener(this);    mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);    try {        mPlayer.setDataSource(file_url);        mPlayer.prepare();    } catch (IllegalArgumentException e) {        OnError(PLAYER_ERRORS.player_not_loaded,e.getMessage() + "");    } catch (SecurityException e) {        OnError(PLAYER_ERRORS.player_not_loaded,e.getMessage() + "");    } catch (IllegalStateException e) {        OnError(PLAYER_ERRORS.player_not_loaded,e.getMessage() + "");    } catch (IOException e) {        OnError(PLAYER_ERRORS.no_connection,e.getMessage() + "");    }}

这是我的倾听者

@OverrIDepublic boolean onInfo(MediaPlayer mp,int what,int extra) {    if(what == MediaPlayer.MEDIA_INFO_BUFFERING_START)    {        OnEvent(PLAYER_EVENT.buffering_start);    }    else if(what == MediaPlayer.MEDIA_INFO_BUFFERING_END)    {        OnEvent(PLAYER_EVENT.buffering_end);        OnGotDuration(getDuration());    }    return what == MediaPlayer.MEDIA_INFO_BUFFERING_START || what == MediaPlayer.MEDIA_INFO_BUFFERING_END;}

有人可以帮我理解为什么会这样吗?
谢谢

解决方法 显然这是AndroID中的一个已知错误.
在播放HLS流时,它永远不会调用OnInfoListener或OnBuffering.

查看here了解更多详情

我所谓的解决方案是创建一个现在沿着播放器一侧运行的线程,并不时检查其进度以确定播放是否停止 – 假设这意味着播放器正在缓冲.

这是我想要的代码

private class BufferingThread extends Thread{    WeakReference<NewDefaultPlayer> player;    long currentPos,lastSecond;    boolean isBuffering,alreadyBuffering;    private Object locker = new Object();    public BufferingThread(NewDefaultPlayer player) {        this.player = new WeakReference<NewDefaultPlayer>(player);    }    private Runnable BufferStart = new Runnable() {        public voID run() {            player.get().OnEvent(PLAYER_EVENT.buffering_start);        }    };    private Runnable BufferStop = new Runnable() {        public voID run() {            player.get().OnEvent(PLAYER_EVENT.buffering_end);        }    };    @OverrIDe    public voID run() {        super.run();        while(true)        {            synchronized (locker) {                currentPos = player.get().getCurrentposition();                isBuffering = currentPos == 0 ? true : currentPos <= lastSecond;                lastSecond = (int) currentPos;                if(alreadyBuffering){                    if(!isBuffering)                    {                        if(player.get().getPlayerState().equals(PLAYER_STATES.IS_PLAYING))                        {                            alreadyBuffering = isBuffering;                            TvinciSDK.getMainHandler().post(BufferStop);                        }                    }                } else {                    if(isBuffering){                        alreadyBuffering = isBuffering;                        TvinciSDK.getMainHandler().post(BufferStart);                    }                }                try {                    sleep(1500);                } catch (InterruptedException e) {                    break;                }            }        }    }}//Stop the thread if the user has stopped the vIDeoprivate voID handleBufferingWorkaround(boolean work){    if(bThread == null)        bThread = new BufferingThread(this);    if(work){        if(!bThread.isAlive())            bThread.start();    }    else if(bThread.isAlive())    {        bThread.interrupt();        bThread = null;    }}

希望能帮助到你

总结

以上是内存溢出为你收集整理的android – 永远不会调用OnInfoListener全部内容,希望文章能够帮你解决android – 永远不会调用OnInfoListener所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存