音视频处理MCT

    Android播放器-2.0-上线公告

    Android播放器1.0的接口是基于BVideoView,2.0 接口是基于BDCloudMediaPlayer。为了老用户的顺利迁移和新客户的快速接入,本文档详细说明如何从1.0 版本的BVideoView迁移到2.0 BDCloudVideoView

    迁移至BDCloudVideoView

    复制BDCloudVideoView代码到工程中

    2.0 新版播放器的jar包仅包含BDCloudMediaPlayer,未包含View控件,但百度开源了BDCloudVideoView控件的代码,您可以从解压包的根目录或Sample工程中拿到,将代码复制到您的工程中即可。

    BDCloudVideoView接口特点

    BDCloudVideoView接口跟安卓系统的VideoView高度一致,您从BVideoView替换为BDCloudVideoView之后,可能发现少了一些接口。

    为了减少BDCloudVideoView对外接口的复杂性,有很多BDCloudMediaPlayer层的接口被封装在了BDCloudVideoView内部方法中,您可以参考开发文档中的BDCloudVideoView了解如何使用BDCloudVideoView。

    注意:多数时候,请不要修改BDCloudVideoView代码,以免给后续升级带来麻烦。

    demo参考

    demo即使用了BDCloudVideoView来播放视频,下面列出demo的层级关系,以供参考:

    ------------------------------
    Activity与控制条
    包名:com.baidu.cloud.videoplayer.demo
    涉及:应用界面如AdvancedPlayActivity/SimplePlayActivity,控制条如AdvancedMediaController/SimpleMediaController。
    作用:在Activity中创建BDCloudVideoView对象,在控制条中实现播放控制。
    --------------↓----------------
    BDCloudVideoView
    包名:com.baidu.cloud.videoplayer.widget
    涉及:BDCloudVideoView控件类及其依赖的类。代码位于demo中。
    作用:封装了BDCloudMediaPlayer对象、视频渲染控件,有自己的状态基变化。
    --------------↓----------------
    BDCloudMediaPlayer
    包名:com.baidu.cloud.media.player
    涉及:播放器Player及监听器等,代码位于bdplayer.jar中。
    作用:解析播放源并填充渲染目标、实际的播放控制逻辑。
    ------------------------------

    release释放接口

    新的BDCloudVideoView在使用完成后,需要释放播放器player和渲染资源。

    bdCloudVideoView.release();

    注意:请在不使用BDCloudVideoView实例后,务必调用释放接口。

    时间单位的变化

    BDCloudVideoView以及BDCloudMediaPlayer类中的涉及到时间的单位都是毫秒

    long durationInMilliSeconds = mMediaPlayer.getDuration();
    long positionInMilliSeconds = mMediaPlayer.getCurrentPosition();
    seekTo(timeInMilliSeconds);

    1.0 的BVideoView的时间单位多为秒;在 2.0 新版里面设置时,需要在原来基础上乘以1000,转换为毫秒。

    监听Listener的变化

    原Listener 新Listener或替代方法
    BVideoView.OnCompletionListener IMediaPlayer.OnCompletionListener
    BVideoView.OnCompletionWithParamListener 无,需分别处理Completion和Error的回调
    BVideoView.OnErrorListener IMediaPlayer.OnErrorListener
    BVideoView.OnInfoListener IMediaPlayer.OnInfoListener
    BVideoView.OnNetworkSpeedListener 无,需自己开定时器调用getDownloadSpeed()接口获得下载速率
    BVideoView.OnPlayingBufferCacheListener 无,不再提供『加载中』的百分比提示
    BVideoView.OnPositionUpdateListener 无,需自己开定时器调用getCurrentPosition()接口
    BVideoView.OnPreparedListener IMediaPlayer.OnPreparedListener
    BVideoView.OnSeekCompleteListener IMediaPlayer.OnSeekCompleteListener
    BVideoView.OnTotalCacheUpdateListener IMediaPlayer.OnBufferingUpdateListener
    - IMediaPlayer.OnVideoSizeChangedListener
    - BDCloudVideoView.OnPlayerStateListener,状态回调监听,以便修改播放控制条
    • 关于OnPositionUpdateListener,可以参考demo中SimpleMediaController类的startPositionTimer()和stopPositionTimer()相关函数及其调用逻辑。
    • 直播播放源在播放过程中,根据播放协议的不同,主播断流时可能走onCompletion回调也可能走onError回调。程序中,需要您检查主播是否完成直播,若未完成直播,自写监听器定期调用 start() 尝试继续拉流播放。

    接口变化

    下列接口,在2.0 的BDCloudVideoView类里面可能没有,但只要在BDCloudMediaPlayer中有,就可以在BDCloudVideoView中增加该接口,或者在BDCloudVideoView类的createPlayer()函数(推荐)中直接设置好。

    1.0 接口 2.0 接口 说明
    BVideoView#getCurrentPlayingUrl() BDCloudVideoView#getCurrentPlayingUrl() -
    BVideoView#selectResolutionType(index) BDCloudVideoView#selectResolutionByIndex(int index)该方法用于播放过程中切换多码率 切换多码率。1.0 接口中涉及selectResolutionType(BVideoView.RESOLUTION_TYPE_AUTO);的地方直接删除即可,因为其实际选择第一条Variant进行播放,与不设置时效果相同。
    BVideoView#setCacheBufferSize(long size) BDCloudVideoView#setMaxCacheSizeInBytes(int size) -
    BVideoView#setCacheTime(float timeSec) BDCloudVideoView#setBufferTimeInMs(int milliSec) 已缓冲了某个播放长度所需的数据,则回调Buffering_End的info
    BVideoView#setCustomHttpHeader(String header) BDCloudVideoView#setHeaders(Map\<String, String> headers) -
    BVideoView#setDecodeMode(int mode) BDCloudVideoView# setDecodeMode(int mode) 2.0 新版支持AUTO(优先硬解)和SW,旧版仅支持SW
    BVideoView#setEnableDolby(boolean enableDolby) -
    BVideoView#setEnableFastStart(boolean isEnable) 无,会自动检测 -
    BVideoView#setFirstBufferingTime(float timeSec) BDCloudVideoView#setMaxProbeTime(int maxProbeTime) -
    BVideoView#setLogLevel(int level) BDCloudVideoView#setLogEnabled(boolean enable)
    BVideoView#setUseApmDetect(boolean useApmDetect) BDCloudVideoView#setUseApmDetect(boolean useApmDetect) 开启后,均需额外嵌入APM SDK
    BVideoView#setUserAgent(String strUA) BDCloudVideoView#setHeaders(Map\<String, String> headers) -
    BVideoView#setVideoPath(String path) BDCloudVideoView#setVideoPath(String path) -
    BVideoView#setVideoPath(String path, String withToken) -BDCloudVideoView#setVideoPathWithToken(String path, String token)
    BVideoView#setVideoScalingMode(int mode) BDCloudVideoView#setVideoScalingMode(int mode) 旧版支持填充模式和裁剪模式;2.0 新版增加了铺满模式 -
    BVideoView#setWatermarkText(String text) 无,需自己加浮层实现 -
    BVideoView#showCacheInfo(boolean show) BDCloudVideoView#showCacheInfo(boolean show) -
    BVideoView#takeSnapshot() BDCloudVideoView#getBitmap() 仅TextureView显示时支持截图
    - BDCloudVideoView#release() 销毁BDCloudVideoView内部的播放资源和渲染资源

    迁移FAQ

    支持多实例

    • 1.0 版本不支持多实例,这需要等待旧的BVideoView实例释放完成后,才能创建新的实例;
    • 2.0 版本已经支持多实例,不同BDCloudVideoView之间互不影响。

    更好的解码性能

    • 1.0 版本仅能使用软解;2.0 新版本支持硬解。
    • 2.0 版本的解码模式默认为AUTO(即优先硬解,找不到硬解解码器时自动转为软解)。如果您想总使用软解,可以通过setDecodeMode接口设置。

    更强大的渲染支持

    • 1.0 版本播放器渲染目标为SurfaceView,该目标不支持移动、旋转等动画,在Listview等View中滚动时会有闪动。
    • 2.0 版本播放器,支持TextureView和SurfaceView渲染。默认渲染目标为TextureView,该目标支持移动旋转的功能动画,可以在ListView中正常使用。 SurfaceView与TextureView的区别,参见开发文档中的BDCloudVideoView部分。

    迁移中遇到问题,请联系我们

    迁移过程中遇到问题,请提交工单论坛,我们将尽快与您联系。

    原百度智能云播放器 Android SDK 1.0 帮助文档请参考Android SDK 1.0

    上一篇
    版本更新记录
    下一篇
    百度Android播放器1.0帮助文档