产品文档 回放技术文档 iOS 回放UI SDK 2.0

BJPlayerplayBackUI SDK

changelog

概述

BJPlayerplayBackUI (百家云 iOS 回放UI SDK, 以下简称"回放UI SDK"), 是基于BJVideoPlayerCore 封装的回放UI的SDK. 提供了一套包含视频,PPT,聊天三个模块的基础回放UI.集成工作量小,便于快速接入和开发. 如果想在BJPlaybackCore的基础上自定义一套UI.

建议先运行点播UIDemo,参考BJPViewController中对回放Core的基本用法,在此基础上进行自定义UI的开发.适用于iOS 9.0+。

Demo

Demo是集成了回放UI SDK的项目, 以源码的形式详细展示了其中播放器的使用, 点播和回放视频的下载等功能. 开发者下载或者Git Clone本项目, 经过简单的修改即可运行Demo.

BJPlayerplayBackUI的使用代码可以参考Demo中的BJPViewController文件.

下面列表展示了Demo项目的项目结构:

BJPlayManagerUI
├── Podfile
├── Podfile.lock
├── Pods
├── Tests
├── BJPlayerManagerUI.xcworkspace
└── BJPlayerManagerUI
     ├── PUAppdelegate.h
     ├── PUAppdelegate.m
     ├── PUMainViewController.h 
     ├── PUMainViewController.m (Demo首页入口)
     ├── PUPlayViewController.h
     ├── PUPlayViewController.m (点播视频播放页面)
     ├── playback (回放视频模块)
            ├── BJPViewController.h (回放视频播放控制器)
            └── BJPViewController.m
     ├── localVideo (本地视频播放模块)
            ├── PMLocalViewViewController.h (本地视频播放控制器)
            └── PMLocalViewViewController.m
     ├── download (下载模块)
            └── BJLDownload 
                 ├── BJLDownloadViewController.h(视频下载控制器)
                 └── BJLDownloadViewController.m
     ├── setting (播放设置模块)
            ├── PUVideoOptionsViewController.h (播放设置控制器)
            ├── PUVideoOptionsViewController.m
            ├── PUPlayOptionsManager.h
            └── PUPlayOptionsManager.m (配置Manager)
     ├── extension (扩展类)
            ├── UIAlertView+bjp.h
            ├── UIAlertView+bjp.m
            ├── NSString+md5.h
            ├── NSString+md5.m
            ├── UIWindow+PUMotion.h
            ├── UIWindow+PUMotion.m
            ├── UIViewController+PUUtil.h
            └── UIViewController+PUUtil.m
     ├── BJPlayerManagerUI-Prefix.pch
     ├── BJPlayerManagerUI-Info.plist
     ├── Base.lproj
            ├── LaunchScreen.storyboard
            └── Main.storyboard
     ├── Images.xcassets (图片资源)
     └── main.m

Demo运行

  • 在 Example 的工程目录下执行 pod install
  • 使用 Xcode 打开 Example 文件夹下的 BJPlayerManagerUI.xcworkspace 文件
  • 将demo中的证书和bundleID更改为开发者自己的数据, 即可运行.

温馨提示

如果在Demo中发现了bug或者发现了SDK的bug,在告知我公司开发人员时,请将系统版本,硬件版本,产生bug的操作流程一并告知我公司开发人员,必要时需要提供日志

回放 UI SDK 功能简介

  • 回放主讲视频: 显示主讲摄像头采集到的视频
  • 课件视图: 展示白板,课件,画笔
  • 聊天视图: 展示聊天列表

回放UISDK 源码已经开源, 文件结构如下

BJPlaybackUI
├── BJPlaybackUI.h
├── BJPlaybackUI.m
├── Resources
├── modules
     ├── BJPImageBrowserViewController
     └── BJPPlaybackOptions(播放配置)
├── utilities
     ├── BJPAppearance
     ├── BJPAuthorization
     └── extensin...
└── room
     ├── BJPRoomViewController(回放房间)
     ├── BJPRoomViewController+control
     ├── BJPRoomViewController+observer 
     ├── BJPRoomViewController+protected
     ├── BJPUViewController+ui
     ├── message(聊天界面)
            ├── BJPChatMessageViewController
            └── BJPChatMessageTableViewCell
     ├── overlay(蒙层)
            └── BJPOverlayViewController
     ├── user(回放的用户列表view)
            ├── BJPUsersViewController
            └── BJPUserCell
     └── view(回放界面的view)
            ├── BJPFullScreenContainerView
            ├── BJPMediaSettingCell
            ├── BJPMediaSettingView
            ├── BJPPlaybackControlView
            ├── BJPReloadView
            ├── BJPSliderView
            ├── BJPThumbnailContainerView
            └── BJPProgressView

SDK集成

Podfile配置

  • Podfile中设置source
source 'https://github.com/CocoaPods/Specs.git'
source 'http://git.baijiashilian.com/open-ios/specs.git'

  • Podfile 中引入BJPlaybackUI
target 'yourProjectName' do
    pod 'BJPlaybackUI', '~> 2.2.0'

# 用于动态引入 Framework,避免冲突问题
script_phase \
:name => '[BJVideoPlayerCore] Embed Frameworks',
:script => 'Pods/BJVideoPlayerCore/frameworks/EmbedFrameworks.sh', # for remote BJVideoPlayerBase
:execution_position => :after_compile

# 点播回放包括直播 SDK 需要加上
script_phase \
:name => '[BJLiveCore] Embed Frameworks',
:script => 'Pods/BJLiveCore/frameworks/EmbedFrameworks.sh',
:execution_position => :after_compile

# 用于清理动态引入的 Framework 用不到的架构,避免发布 AppStore 时发生错误,需要写在动态引入 Framework 的 script 之后
script_phase \
:name => '[BJLiveBase] Clear Archs From Frameworks',
:script => 'Pods/BJLiveBase/script/ClearArchsFromFrameworks.sh "BJHLMediaPlayer.framework" "BJYIJKMediaFramework.framework"',
:execution_position => :after_compile
end

全局设置

  • 配置ATS.
    • 需要在info.plist里面增加 NSAllowsArbitraryLoads = true
  • 1.4.5 之后的版本支持设置专属域名前缀
    • 例如专属域名为 demo123.at.baijiayun.com,则前缀为 demo123,参考专属域名说明
//注意:需要头文件中引入
#import <BJVideoPlayerCore/BJVAppConfig.h>

[[BJVAppConfig sharedInstance] setPrivateDomainPrefix:privateDomainPrefix];
  • 注意 BJVideoPlayerCoreBJVRequestTokenDelegate

在开始接入点播/回放的播放和下载之前, 首先必须要为BJVideoPlayerCore设置tokenDelegate, 下面为tokenDelegate需要实现的两个方法:

//用于在播放/下载中, 由客户提供某一videoID对应的视频播放token
- (void)requestTokenWithVideoID:(NSString *)videoID
                     completion:(void (^)(NSString * _Nullable token, NSError * _Nullable error))completion;

//用于在播放/下载中, 由客户提供某一回放课程对应的视频播放token                     
- (void)requestTokenWithClassID:(NSString *)classID
                      sessionID:(nullable NSString *)sessionID
                     completion:(void (^)(NSString * _Nullable token, NSError * _Nullable error))completion;

可以参考点播UIDemoPUAppDelegate.m文件中BJVRequestTokenDelegate的使用方法

回放教室创建和进入

  • 详细请参考BJPRoomViewController.h文件
  • 在线回放视频
/**
 创建回放的room,使用该接口播放回放,则默认使用AVPlayer,且播放的是不加密的视频
 创建在线视频, 参数不可传空
 创建本地room的话, 两个参数传nil

 @param classID classID
 @param sessionID sessionID 长期房间回放课节参数。如果 classID 对应的课程不是长期房间,可不传;如果 classID 对应的课程是长期房间, 不传则默认返回长期房间的第一个课程。
 @param token token
 @return room
 */
+ (__kindof instancetype)onlinePlaybackRoomWithClassID:(NSString *)classID
                                             sessionID:(nullable NSString *)sessionID
                                                 token:(NSString *)token;

/**
 创建回放的room,使用该接口播放回放,可以选择使用avplayer或者ijkplayer播放视频,以及是否使用加密视频
 !!!:只有使用ijkplayer才可以播放加密视频,因此选择avplayer播放视频时,是否加密的参数设置无效
 创建在线视频, 参数不可传空
 创建本地room的话, 两个参数传nil

 @param classID classID
 @param sessionID sessionID 长期房间回放课节参数。如果 classID 对应的课程不是长期房间,可不传; 如果classId对应的课程是长期房间, 不传则默认返回长期房间的第一个课程。
 @param token token
 @param options 回放设置
 @return room
 */
+ (__kindof instancetype)onlinePlaybackRoomWithClassID:(NSString *)classID
                                             sessionID:(nullable NSString *)sessionID
                                                 token:(NSString *)token
                                               options:(BJPPlaybackOptions *)options;

//示例用法
BJPRoomViewController *vc = [BJPRoomViewController onlinePlaybackRoomWithClassID:classID
                                                                           sessionID:sessionID
                                                                               token:token
                                                                             options: playbackOptions];
[self presentViewController:vc animated:YES completion:nil];
  • 本地回放视频
/**
 创建播放本地视频  
 @param downloadItem 本地回放文件类型,通过下载模块获得
 */

+ (__kindof instancetype)localPlaybackRoomWithDownloadItem:(BJVDownloadItem *)downloadItem;

+ (__kindof instancetype)localPlaybackRoomWithDownloadItem:(BJVDownloadItem *)DownloadItem
                                                   options:(BJPPlaybackOptions *)options;

//示例用法
BJPRoomViewController *playbackVC = [BJPRoomViewController localPlaybackRoomWithDownloadItem:item options:playbackOptions];

[self presentViewController:playbackVC animated:YES completion:nil];

使用

BJPlayerplayBackUI SDK 集成方式比较简单, 进入回放教室BJPRoomViewController即可.

  • 教室加载成功之后,进入如下主界面
    登陆界面

登陆界面

代码示例

参见UIDemo,Demo只是示范BJPlayerplayBackUI SDK中接口的使用方式,并不保证使用方式最符合用户的需求,请用户在充分理解SDK机制的前提下,根据自己的情况处理数据。对照抄SDKDemo代码引起的性能问题和其他非SDK bug,不负任何责任。