产品文档 点播技术文档 iOS 点播UI SDK 2.0

BJVideoPlayerUI 点播UI SDK

概述

BJVideoPlayerCore(百家云 iOS Core SDK, 以下简称"Core SDK"), 是一款支持iOS 点播/回放视频播放/下载的SDK, 不带UI, UI需要开发者自主集成. 适用于iOS 9.0+。

BJVideoPlayerUI (百家云 iOS 点播 UI SDK, 以下简称"点播UI SDK"), 是基于BJVideoPlayerCore 封装的提供通用点播播放UI的SDK. 适用于iOS 9.0+。

Demo

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

下面列表展示了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的操作流程一并告知我公司开发人员,必要时需要提供日志

BJVideoPlayerUI SDK

changelog

点播UI SDK是在Core SDK的基础上对通用点播播放功能的集成, 如果用户有更丰富的需求, 请参考点播UI SDK中接口的使用方式, 在理解点播SDK机制的前提下, 根据自己的需求进行自定义开发.适用于iOS9.0+。

通用功能简介

  • 支持横竖屏切换
  • 视频播放/暂停/快进/快退, 改变淸晰度和倍速播放
  • 横屏播放支持锁屏功能
  • 视频播放界面左侧支持滑动调节亮度, 右侧支持滑动调节音量

点播UISDK源码已开源, 文件结构如下:

BJVideoPlayerUI
├── BJVideoPlayerUI.h
├── BJVideoPlayerUI.m
├── Resources
├── Theme
     └── BJPUTheme
├── Util
     ├── BJPUVideoOptions (播放配置)
     ├── BJPUAppearance
     └── MBProgressHUD+bjp
├── View
     ├── BJPUMediaControlView
     ├── BJPUMediaSettingCell
     ├── BJPUMediaSettingView 
     ├── BJPUProgressView
     ├── BJPUReloadView
     └── BJPUSliderView
└── ViewController
     ├── BJPUViewController
     ├── BJPUViewController+media
     ├── BJPUViewController+observe 
     ├── BJPUViewController+protected
     ├── BJPUViewController+reachability
     └── BJPUViewController+ui

SDK集成

Podfile配置

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

  • Podfile 中引入BJVideoPlayerUI
target 'yourProjectName' do
    pod 'BJVideoPlayerUI', '~> 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];
  • 注意:BJVideoPlayerCore 和 BJVRequestTokenDelegate

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

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

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

可以参考Demo的PUAppDelegate.m文件中BJVRequestTokenDelegate的使用方法

播放器使用

  • 使用BJPUVideoOptions初始化BJPUViewController
  • 根据需要设置block
  • 添加播放器view到对应的页面上
self.playerUIVC = [[BJPUViewController alloc] initWithVideoOptions:[PUPlayOptionsManager getVideoOptions]];
[self addChildViewController:self.playerUIVC];
[self.playerUIVC didMoveToParentViewController:self];

__weak typeof(self) weakSelf = self;
// 退出回调
[self.playerUIVC setCancelCallback:^{
    __strong __typeof__(weakSelf) strongSelf = weakSelf;
    [strongSelf.navigationController popViewControllerAnimated:YES];
}];

// 锁屏回调
[self.playerUIVC setScreenLockCallback:^(BOOL locked) {
    PUAppDelegate *appDelegate = (PUAppDelegate *)[UIApplication sharedApplication].delegate;
    appDelegate.allowRotation = !locked;
}];

[self.view addSubview:self.playerUIVC.view];
  • 播放视频
//播放在线视频
[self.playerUIVC playWithVid:_vid token:_token];

//播放本地视频BJVDownloadItem
[self.playerUIVC playWithDownloadItem:downloadItem];

定制UI元素(BJPUTheme.h)

//设置颜色
//默认状态下文本颜色
+ (void)setDefaultTextColor:(UIColor *)color;   
//选中状态的文本颜色
+ (void)setHighlightTextColor:(UIColor *)color;
//设置topBar/bottomBar/definitionView/RateView的背景
+ (void)setBrandColor:(UIColor *)color;

//small image
//logo
+ (void)setLogoImage:(UIImage *)image;
//backButtonImage
+ (void)setBackButtonImage:(UIImage *)image;
//PlayButton
+ (void)setPlayButtonImage:(UIImage *)image;
//pauseButton
+ (void)setPauseButtonImage:(UIImage *)image;
//stopButton
+ (void)setStopButtonImage:(UIImage *)image;
//nextButton
+ (void)setNextButtonImage:(UIImage *)image;
//ProgressSlider
+ (void)setProgressSliderImage:(UIImage *)image;
//ScaleButton
+ (void)setScaleButtonImage:(UIImage *)image;
//ForwardImage
+ (void)setForwardImage:(UIImage *)image;
//BackwardImage
+ (void)setBackwardImage:(UIImage *)image;

代码示例

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

常见问题

  • 为什么接入了BJPUViewController之后,点击全屏,无法全屏

    • 首先,看APP项目的设置,检查General -> Device Orientation中是否打开了Landscape Left,Landscape Right.
    • 其次,确认在代码中, window、root view controller、navigation controller、tabbar controller 等VC中有没有特殊设置,是否支持旋转和支持的方向
    • 最后,如果APP其他界面代码不能支持横屏,可以仅在使用BJPUViewController时允许横屏,其他时候限制使用竖屏
  • UI SDK的功能和界面无法满足现有需求