高级播放器快速进阶
所有文档

          音视频处理 MCP

          高级播放器快速进阶

          播放控制条

          简单播放控制条可参考demo中的SimpleMediaController类。该类由播放按钮、播放进度条等组成。 涉及到的接口有:

          • long getDuration() 获取视频时长,单位为毫秒
          • long getCurrentPosition 获取当前播放位置,单位为毫秒
          • void seekTo(long milliSecond) 切换到某处播放
          • start() 开始播放
          • pause() 暂停播放
          • OnBufferingUpdateListener监听,回调时返回已缓存时长占视频播放时长的百分比,根据该值更新二级进度条(缓存进度)。
          • boolean isPlaying() 是否正在播放

          高级设置接口

          BDCloudMediaPlayer提供多个高级设置接口:

          • setBufferSizeInBytes(int size) 设置缓冲过程中,起播数据字节长度;即『加载中』缓冲字节数达到这个size后,回调BUFFERING_END;默认为 1*1024*1024,即1M,上限为4M;
          • setDecodeMode(int mode) 设置解码模式,可以设置为 DECODE_AUTO(优先硬解,其次软解) 或者 DECODE_SW(软解),默认为DECODE_AUTO;
          • setLogEnabled(boolean enable) 设置开启播放器Logcat输出,默认为false;发布应用时,需保证该值为false;
          • setVolume(float leftVolume, float rightVolume) 设置左右声道的音量
          • setInitPlayPosition(long positionInMilliSeconds) 设置初始播放位置
          • setLocalCacheEnabled(boolean isEnable, String cachePath) 是否开启本地边播边缓存;若开启传入缓存路径,传入则使用默认缓存路径
          • setPcdnEnabled(boolean pcdnEnable, boolean p2pEnable, long networkSoHandle) 是否Pcdn功能,是否开启P2P;若开启Pcdn,则需传入网络库句柄,当前播放器使用的是chromium 浏览内核网络库, 支持quic。
          • muteOrUnmuteAudio(boolean flag) 是否静音播放

          视频文件预取

          高级播放器支持视频文件(hls、dash等分片协议除外)预取。 预防功能由BDCloudPlayerManager提供,涉及到的接口有:

          • libsPreLoad(Context context) 预加载播放相关库,若在播放器实例化之前使用预取功能,则需预加载播放库
          • prefetch(String url, String ua, String header, int prepareType, int prefetchSize,CyberPlayerManager.HttpDNS httpDns, String businessType) 视频文件预取。可传入用户代理、请求需要的头;prepareType 预加载类型,0 为预加载,1为预连接;prefetchSize 为预加载大小,最小默认值30K,最大600K,dns 及 businessType 场景信息可传空。
          • stopPrefetch(String url) 停止指定视频文件预取,一般不需要使用

          注意: 若在播放器实例化之前使用预取功能,则需调用libsPreLoad(Context context)预加载播放库。若有播放器实例化后,则可直接调用prefetch接口进行预取。

          HLS视频下载

          播放器支持对M3U8视频进行下载和管理。

          下载管理器

          下载管理器以单例的形式提供:

          globalVideoDownloadManager = VideoDownloadManager.getInstance(context, userName);

          其中userName仅用于做下载记录的区分,不要求为实际用户名,可以是实际用户名的加密串或签名串。

          下载步骤

          1. 调用globalVideoDownloadManager = VideoDownloadManager.getInstance(context, userName)获得下载管理单例。
          2. 调用globalVideoDownloadManager.startOrResumeDownloader(url, observer)启动下载任务。

            函数原型:

            public void startOrResumeDownloader(String url, DownloadObserver observer)
            public void startOrResumeDownloaderWithToken(String url, String token, DownloadObserver observer) // 下载加密视频

            此后也可调用暂停(pauseDownloader)、恢复(startOrResumeDownloader)、删除(deleteDownloader)、批量停止(stopAll)等接口对下载任务进行管理。

            其中,在启动下载时,若想实时监听下载进度及状态,可继承DownloadObserver类并实现update方法,将该类的实例传给startOrResumeDownloader即可实时监听。不想实时监听,startOrResumeDownloader方法的第二个参数可传null。

            public void update(DownloadableVideoItem downloader)
          3. 实时获取下载任务的信息

            任务下载过程中,回调update(DownloadableVideoItem downloader),实时获取下载状态。

            downloader对象可获得下述方法:

          方法 描述
          getUrl() 获取单个下载的url
          getLocalAbsolutePath() 获取下载文件的本地绝对路径
          getProgress() 获取下载进度
          getStatus() 获取下载状态(枚举类DownloadStatus)
          getErrorCode() 下载状态为Error的时候,通过该接口获取错误码
          getFailReason() 获取下载失败或中止的简单描述

          注意: 错误码如DownloadableVideoItem.ERROR_CODE_INVALID_URL等

          其中,发生错误时的错误码如下表:

          错误码 描述
          ERROR_CODE_NO_ERROR 无错误
          ERROR_CODE_INVALID_URL 地址无效
          ERROR_CODE_NETWORK_FAILED 网络问题
          ERROR_CODE_SDCARD_UNMOUNTED 本地存储问题
          ERROR_CODE_M3U8_\INVALID_FORMAT m3u8格式问题
          ERROR_CODE_M3U8_SAVE_FAILED m3u8存储问题
          ERROR_CODE_M3U8_DRM_INVALID drm保护相关key或者token无效
          ERROR_CODE_TS_SAVE_FAILED ts文件保存失败
          1. 通过url查找下载任务

            通过 downloadableVideoItem = globalVideoDownloadManager.getDownloadableVideoItemByUrl(url) 获得下载任务item,以便访问item中的信息。
            通过 globalVideoDownloadManager.getAllDownloadableVideoItems()获得所有下载单元,可以从中选择出未下载完成的任务,启动继续下载(startOrResumeDownloader(oneItem.getUrl(), null)),即可实现断点续传。

          2. 下载成功后,DownloadableVideoItem#getLocalAbsolutePath 方法拿到本地视频文件全路径,传给播放器进行本地播放即可。

          边播边缓存

          代理缓存器支持HLS、MP4视频缓存

          设置视频边播边缓存步骤

          mProxyCacheManager = ProxyCacheManager.getInstance(); 获取缓存代理管理器。 String proxyPath = mProxyCacheManager.getProxyUrl(mAppContext, path); 获取播放代理链接。 mProxyCacheManager.setCacheAvailableListener(cacheListener); 设置缓存进度监听器。 setVideoURI(proxyPath); 将代理链接设置给播放器。 mProxyCacheManager.release(); 反注册缓存监听器,释放资源。 详细代码参见demo中的BDCloudVideoView.java

          上一篇
          高级播放器接口速查
          下一篇
          iOS平台