http streaming缓冲buffer更新进度的处理流程

对于http streaming,更新buffer进度的处理在AwesomePlayer::onBufferingUpdate()函数中,首先判断mCachedSource != NULL,即是http://流媒体的情况下,通过getBitrate(&bitrate)函数取得bitrate,然后计算出buffer的进度,通过notifyListener_l(MEDIA_BUFFERING_UPDATE, percentage)发消息,在MediaPlayer.cpp类对应MediaPlayer::notify函数接收到MEDIA_BUFFERING_UPDATE消息,然后在应用层通过注册MediaPlayer的setOnBufferingUpdateListener监听,接收到MEDIA_BUFFERING_UPDATE消息,即可以获得buffer更新的进度值percent。

1.AwesomePlayer::onBufferingUpdate()函数

计算buffer更新的percent

其中8000000ll为1byte以us为单位的bit数,单位long long类型,即1byte = 1byte * 8bits/byte * 1000000us = 8000000ll

2.AwesomePlayer::getBitrate函数

3.NuCachedSource2::getSize

调用其成员变量mSource的getSize函数取得当前更新的size大小,mSouce即为NuCachedSource2构造函数传递的参数,此参数为AwesomePlayer::finishSetDataSource_l()函数中创建mCachedSource对象时传递的类型为NuHTTPDataSource的参数mConnectingDataSource。

所以,mSource->getSize调用的是NuHTTPDataSource的getSize函数。

4.NuHTTPDataSource::getSize函数

此函数取得size值为mContentLength的值,取得mContentLength的值的处理在NuHTTPDataSource::connect函数,从http header中读取的,即从"Content-Length"或者"Content-Range"头域指定的值中计算出的。

NuCachedSource2和NuHTTPDataSource类以及getSize函数的关系图如下:

http streaming缓冲buffer更新进度的处理流程_第1张图片

5.mediaplayer.cpp的MediaPlayer::notify函数


6.MediaPlayer.java的setOnBufferingUpdateListener函数

在onBufferingUpdate函数中的参数percent即为buffer更新进度值0-100.

你可能感兴趣的:(buffer)