相关疑难解决方法(0)

检测VideoVIew是否正在缓冲

有谁知道是否有可能检测到VideoView何时缓冲?

我想在视频缓冲时显示ProgressDialog.

到目前为止,我尝试使用OnPreparedListener,但这仅在首次加载视频时才有效.如果正在播放视频并且用户将擦洗条移动到不同的点,则视频仍然"准备好",即使它正在缓冲.

我也试过(我知道这很糟糕)AsyncThread只是忙等待isPlaying():

private class BufferTask extends AsyncTask<Void, Void, Void> {

  protected Void doInBackground(Void...voids) {
    final VideoView videoView = (VideoView)findViewById(R.id.video);
    while (!videoView.isPlaying()) { }
    return null;
  }

 protected void onPostExecute(Void v) {
     // Hide the dialog here...
 }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为只要你调用start(),即使它正在缓冲,VideoView似乎也被认为是在播放.

我能想到的唯一解决方案是构建一个自定义的VideoView类型类,以便我可以访问它的MediaPlayer实例.

有任何想法吗?谢谢阅读.

android media-player android-videoview

15
推荐指数
2
解决办法
1万
查看次数

永远不会调用OnInfoListener

我正在尝试收听我创建的媒体播放器的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() + "");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的倾听者

    @Override
public 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) …
Run Code Online (Sandbox Code Playgroud)

android

8
推荐指数
1
解决办法
3395
查看次数

使用Android MediaPlayer进行流媒体播放 - 捕获错误和缓冲

MediaPlayer从HTTP URL流式传输时,我无法恢复弹性.

如果我开始播放文件,但随后丢弃连接(例如飞行模式),则MediaPlayer#OnErrorListener生成what=1, extra=-17然后不久what=-38, extra=0.

我没有在API中看到这个表示的文档,除了extra是"通常依赖于实现".我正在使用HTC Hero(好吧,它是T-Mobile UK的G2 Touch).

其他人是否获得相同的值,并且可以安全地捕获这些值,因为连接已经消失了吗?

连接重新出现时,如何才能最好地恢复?(保存当前的搜索偏好,并每5秒重试一次?)

我怎么知道设备何时决定开始播放它正在缓冲的内容 - 是否有回调(除了轮询isPlaying())?

此外,我不完全确定onBufferingUpdate提供什么.我正在使用40分钟的播客MP3 (64kbps bitrate)- 缓冲分为1%,2%,3%.当我寻求大约30分钟,它显示75%,然后当我寻求回到开始回到5% - 这个回调的重点是什么,除了显示大约什么是缓存?

最后 - 有什么方法可以管道流式传输到MP3什么?

streaming android buffering media-player

7
推荐指数
2
解决办法
1万
查看次数