一 AlivcLiveVideo简介
视频直播服务(ApsaraVideo Live)是基于领先的内容接入与分发网络和大规模分布式实时转码技术打造的音视频直播平台,提供便捷接入、高清流畅、低延迟、高并发的音视频直播服务。
相关链接
二 sdk集成
获取推流SDK:下载地址
其中SDK包含以下文件:
demo: 调用 SDK 的示例工程,开发者可参考demo代码进行开发集成
lib: SDK开发包,包含framework文件,需要在工程中进行引用
doc: 相关接入文档。
拖拽 sdk 文件夹到自己的 Xcode 项目中,勾选 Copy items if needed,点击 Finish。
三 相关配置
打开项目的 app target,在 Build Phases 中的 Link Binary With Libraries 添加以下依赖库:
- libz.tbd
- VideoToolbox.framework
- AudioToolbox.framework
- libstdc++.tbd
- SystemConfiguration.framework
- CoreTelephony.framework
四 代码示例
func creatSession() {
//初始化 config 配置类
configuration = AlivcLConfiguration.init()
//设置推流地址
configuration.url = "rtmp://push.live.t.zmengzhu.com/mz/3673?vhost=live.t.zmengzhu.com&auth_key=1502804297-0-0-1c4d3a9714198f09e7780936fc688414";
//设置最大码率
configuration.videoMaxBitRate = 1500 * 1000;
//设置当前视频码率
configuration.videoBitRate = 600 * 1000;
//设置最小码率
configuration.videoMinBitRate = 400 * 1000;
//设置视频帧率
configuration.fps = 25;
//设置音频码率
configuration.audioBitRate = 64 * 1000;
//设置直播分辨率
configuration.videoSize = CGSize.init(width: 360, height: 640)
//设置横竖屏
configuration.screenOrientation = .AlivcLiveScreenVertical;
//设置摄像头采集质量
configuration.preset = AVCaptureSessionPresetiFrame1280x720;
//设置前置摄像头或后置摄像头
configuration.position = .back;
//设置水印图片
configuration.waterMaskImage = UIImage.init(named: "订阅选中")
//设置水印位置
configuration.waterMaskLocation = .AlivcLiveWaterMaskLocationLeftTop
//设置水印相对x边框距离
configuration.waterMaskMarginX = 10;
//设置水印相对y边框距离
configuration.waterMaskMarginY = 70;
//设置重连超时时长
configuration.reconnectTimeout = 5;
let captureSession = AVCaptureSession.init()
if captureSession.canSetSessionPreset(AVCaptureSessionPreset1280x720) {
configuration.preset = AVCaptureSessionPreset1280x720
}else if captureSession.canSetSessionPreset(AVCaptureSessionPresetiFrame960x540)
{
configuration.preset = AVCaptureSessionPresetiFrame960x540
}else
{
configuration.preset = AVCaptureSessionPreset640x480
}
liveSession = AlivcLiveSession.init(configuration: configuration)
liveSession.delegate = self
liveSession.alivcLiveVideoStartPreview()
view.insertSubview(self.liveSession.previewView(), at: 0)
self.liveSession.previewView().snp.makeConstraints { (make) in
make.top.equalTo(view).offset(80)
make.bottom.equalTo(view).offset(-50)
make.left.right.equalTo(view)
}
let button = UIButton.init(type: .custom)
button.setTitle(NSLocalizedString("Welcome", comment: "Welcome"), for: .normal)
button.setTitleColor(UIColor.red, for: .normal)
button.addTarget(self, action: #selector(buttonclick), for: .touchUpInside)
view.addSubview(button)
button.snp.makeConstraints { (make) in
make.centerX.centerY.equalTo(view)
}
}
func buttonclick()
{
self.liveSession.alivcLiveVideoConnectServer()
}
// MARK: - AlivcLiveSessionDelegate
//required
func alivcLiveVideoLiveSession(_ session: AlivcLiveSession!, error: Error!) {
//推流错误
}
func alivcLiveVideoLiveSessionNetworkSlow(_ session: AlivcLiveSession!) {
//网络很慢 不建议直播
}
//optional
func alivcLiveVideoLiveSessionConnectSuccess(_ session: AlivcLiveSession!) {
//推流链接成功
}
func alivcLiveVideoOpenAudioSuccess(_ session: AlivcLiveSession!) {
//麦克风获取成功
}
func alivcLiveVideoOpenVideoSuccess(_ session: AlivcLiveSession!) {
//摄像头获取成功
}
func alivcLiveVideoLiveSession(_ session: AlivcLiveSession!, openAudioError error: Error!) {
//音频打开失败
}
func alivcLiveVideoLiveSession(_ session: AlivcLiveSession!, openVideoError error: Error!) {
//视频设备打开失败
}
func alivcLiveVideoLiveSession(_ session: AlivcLiveSession!, encodeAudioError error: Error!) {
//音频转码失败
}
func alivcLiveVideoLiveSession(_ session: AlivcLiveSession!, encodeVideoError error: Error!) {
//视频转码失败
}
func alivcLiveVideoReconnectTimeout(_ session: AlivcLiveSession!, error: Error!) {
//重连超时
}