音视频处理MCT

    高级播放器快速进阶

    播放控制条

    简单播放控制条可参考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平台