title: 快速搭建属于自己的斗鱼TV
date: 2016-12-30 13:31:45
tags: 直播
thumbnail: http://img.25pp.com/uploadfile/soft/images/2015/0724/20150724031211421.jpg
让小白也可以快速搭建属于自己的斗鱼TV
的教程
简明扼要,开始干活:
- 打开
qiniu.com
注册个人开发者帐号 - 申请直播空间
- 这里有个坎儿,就是你得有一个备案的域名,域名备案的服务我这里提供,可以找我QQ 958226951
申请之后等待3-7天,就会有结果了,一般不会被拒绝的,你的邮箱会收到一封审核通过的邮件:
再次打开自己的七牛开发者面板,发现顶部有一个黄色的提示,让你马上体验直播,或者点击左侧列表的直播标识也可以进入配置界面。然后就是一系列的简单配置,都是顾名思义的配置,大家自己照着配就好,配置CName是比较重要的环节,共有6个CName需要你配置到自己的已备案域名下。
接下来我们添加一个自己的房间:
名称大家自己随便起,接下来我们记录一下需要记录的一些信息:
这样,七牛这边的工作就完成了,按理说,我们应该准备一台服务器进行房间的创建操作,但是这里为了先让大家跑通流程,就不搞的那么麻烦了,直接手动在这里创建一个拿来用。接下来我们创建两个新的工程用于测试,一个用于推流,另一个用于播放。
推流项目
pod 'PLMediaStreamingKit'
都是有开发经验的人,我也不多说,引入PLMediaStreamingKit
作为推流库,接下来进行配置(由于我使用的是Swift,所以这里在桥接文件中引入PLMediaStreamingKit.h
):
首先,在使用推流前无比初始化推流环境:
PLStreamingEnv.initEnv()
首先按照官方文档创建一个Stream对象
:
// 创建流对象
let stream = PLStream(json: NSDictionary(dictionary: ["id": "helloworld",
"title": "Hello world",
"hub" : "leafedu",
"publishkey": "bbc2d839fbeafa70",
"publishSecurity": "static",
"disabled": NSNumber(value: false),
"profiles": NSArray(objects: "420p", "720p"),
"hosts": [
"publish": [
"rtmp": "rtmp://pili-publish.devdylan.cn/leafedu/helloworld"
],
"live": [
"hdl": "http://pili-live-hdl.devdylan.cn/leafedu/helloworld.flv",
"hls": "http://pili-live-hls.devdylan.cn/leafedu/helloworld.m3u8",
"rtmp": "rtmp://pili-live-rtmp.devdylan.cn/leafedu/helloworld",
"http": "http://pili-live-hls.devdylan.cn/leafedu/helloworld.m3u8"
],
"playback": [
"hls": "http://live.devdylan.cn/notification",
"http": "http://live.devdylan.cn/notification"
],
"play": [
"http": "http://pili-live-hls.devdylan.cn/leafedu/helloworld.m3u8",
"rtmp": "rtmp://pili-live-rtmp.devdylan.cn/leafedu/helloworld"
]
]]) as! [AnyHashable : Any] )
这里的填充的内容是按照PLMediaStreamingKit
的开发文档写的示例内容,由于我们没有自己的服务器,所以这里先随便填充一些内容,真正的使用我们刚才创建好的推流地址在后边,接下来创建一些基础的音视频,音视频流配置:
let videoCaptureConfiguration = PLVideoCaptureConfiguration.default()
let audioCaptureConfiguration = PLAudioCaptureConfiguration.default()
let videoStreamingConfiguration = PLVideoStreamingConfiguration.default()
let audioStreamingConfiguration = PLAudioStreamingConfiguration.default()
初始化推流Session
并添加一个实时预览:
// 初始化Session
session = PLMediaStreamingSession(videoCaptureConfiguration: videoCaptureConfiguration, audioCaptureConfiguration: audioCaptureConfiguration, videoStreamingConfiguration: videoStreamingConfiguration, audioStreamingConfiguration: audioStreamingConfiguration, stream: stream)
// 添加预览
if let preView = session?.previewView {
view.addSubview(preView)
}
自行写一个按钮,在按钮动作中开始推流,这个时候写我们刚刚创建好房间的推流地址
:
self.session?.startStreaming(withPush: URL(string: "你的以rtmp开头的推流地址")!) {
print($0)
}
然后看日志输出,明白人能看的懂。
播放端
pod 'PLPlayerKit'
创建播放器:
let player = PLPlayer(liveWith: URL(string: "rtmp://pili-live-rtmp.devdylan.cn/leafedu/helloworld")!, option: PLPlayerOption.default())
上边是你播放推流的地址
然后添加到view上边,并设置代理:
// 设置代理
player?.delegate = self
if let playView = player?.playerView {
view.addSubview(playView)
}
接下来,实现代理方法:
func player(_ player: PLPlayer, statusDidChange state: PLPlayerStatus) {
}
func player(_ player: PLPlayer, stoppedWithError error: Error?) {
print(error?.localizedDescription ?? "444")
}
func player(_ player: PLPlayer, codecError error: Error) {
print(error.localizedDescription )
}
第一个方法是状态发生变化的时候,后两个是遇到错误的时候,同样,自己添加一个按钮控制开始播放,播放的代码为:
self.player?.play()
测试
打开推流端
,点击推流按钮开始推流,在播放端点击开始播放,就会看到直播已经建立了起来。在测试前需要注意的事项:
- Xcode权限的申请
我们需要申请Camera以及MicroPhone的隐私权限:
包括ATS,网络的权限,接下来大家就可以测试了,在测试的过程中,可以在七牛的开发者平台查看实时信息:
可以在创建直播服务是绑定的空间内查看到直播的记录文件,保存的时长依你创建是选择的为准。
这样,我们大概用20分钟的时间就打通了直播流程。接下来按照业务需求搭建自己服务器通过七牛直播服务端SDK创建房间等等的事情交给大家自己了。
配置
在Pili为大家提供了整套的移动视频直播SDK(Android与iOS),PLMediaStreamingKit同样提供了高阶的一些使用,比如说美颜,声音混响等操作。这里是一份开发指南,大家可以细阅,可以达到80%的业务需求。
网友评论