mediaplayer中通过oninfo计算播放速率Mbps
时间: 2023-11-28 20:51:23 浏览: 34
MediaPlayer中的onInfo回调函数可以获取到一些音视频播放的信息,其中包括MEDIA_INFO_DOWNLOAD_RATE(801)信息,该信息表示当前下载速率,单位是bps。如果要计算播放速率Mbps,可以将该值除以1000,000。示例代码如下:
```java
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
if (what == MediaPlayer.MEDIA_INFO_DOWNLOAD_RATE) {
float playRate = extra / 1000000f;
Log.d(TAG, "播放速率:" + playRate + "Mbps");
}
return true;
}
```
另外需要注意的是,该回调信息只有在使用网络流媒体播放时才能获取到,如果是本地视频播放,则无法获取该信息。
相关问题
mediaplayer中通过oninfo计算缓冲速率Mbps
在 Android MediaPlayer 中,可以通过监听 `onInfo` 回调函数中的 `MEDIA_INFO_BUFFERING_UPDATE` 事件来获取正在缓冲的进度百分比和缓冲速率。具体地,可以在 `onInfo` 回调函数中计算缓冲速率(Mbps)的代码如下:
```java
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
if (what == MediaPlayer.MEDIA_INFO_BUFFERING_UPDATE) {
int bufferPercent = extra; // 缓冲进度百分比
long duration = mp.getDuration(); // 音频或视频总时长
long bufferedDuration = duration * bufferPercent / 100; // 已缓冲的时长
long bufferedBytes = bufferedDuration * bitrate / 8; // 已缓冲的字节数
long downloadTime = System.currentTimeMillis() - startTime; // 下载时间(毫秒)
double downloadSpeed = bufferedBytes / (downloadTime / 1000.0) / 1000000.0; // 缓冲速率(Mbps)
Log.d(TAG, "Buffering rate: " + downloadSpeed + " Mbps");
}
return true;
}
```
其中,`bitrate` 是音频或视频的比特率(单位:bps),可以通过调用 `mp.getTrackInfo()` 方法来获取。需要注意的是,这种方法只能估算当前的缓冲速率,因为网络状况可能会发生变化,从而导致缓冲速率的变化。
mediaplayer中通过oninfo计算播放缓冲速率Mbps
在 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 事件获取到当前已经缓存的数据量和总数据量,然后根据已经播放的时间计算出播放速率,再减去已经缓存的数据量/播放时间,得到播放缓冲速率。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)