mediaplayer中通过oninfo计算播放缓冲速率Mbps
时间: 2023-11-28 18:51:33 浏览: 27
在 Android 的 MediaPlayer 中,通过监听 onInfo 事件可以获取到 MediaPlayer 播放的一些状态信息,其中包括 MEDIA_INFO_BUFFERING_START 和 MEDIA_INFO_BUFFERING_END 事件。MEDIA_INFO_BUFFERING_START 表示 MediaPlayer 开始缓冲数据,而 MEDIA_INFO_BUFFERING_END 表示 MediaPlayer 缓冲结束,开始播放数据。
我们可以通过这两个事件中获取到的时间戳,计算出缓冲所花费的时间,然后根据已缓存的数据量计算出缓冲速率,进而计算出播放缓冲速率Mbps。
具体的计算方法如下所示:
```java
public class MyMediaPlayer extends MediaPlayer {
private long mBufferingStartTime;
private long mBufferingEndTime;
private long mBufferedDataSize;
@Override
public void setOnInfoListener(OnInfoListener listener) {
super.setOnInfoListener((mp, what, extra) -> {
switch (what) {
case MediaPlayer.MEDIA_INFO_BUFFERING_START:
mBufferingStartTime = System.currentTimeMillis();
break;
case MediaPlayer.MEDIA_INFO_BUFFERING_END:
mBufferingEndTime = System.currentTimeMillis();
long bufferingTime = mBufferingEndTime - mBufferingStartTime;
double bufferingSpeedMbps = (mBufferedDataSize / bufferingTime) * 8 / 1000000.0;
Log.d(TAG, "Buffering speed: " + bufferingSpeedMbps + " Mbps");
break;
case MediaPlayer.MEDIA_INFO_BUFFERING_UPDATE:
mBufferedDataSize = extra;
break;
}
return listener != null && listener.onInfo(mp, what, extra);
});
}
}
```
需要注意的是,这里计算的是缓冲速率,而不是播放缓冲速率。如果需要计算播放缓冲速率,需要通过监听 onBufferingUpdate 事件获取到当前已经缓存的数据量和总数据量,然后根据已经播放的时间计算出播放速率,再减去已经缓存的数据量/播放时间,得到播放缓冲速率。