快速搭建属于自己的斗鱼TV

让小白也可以快速搭建属于自己的斗鱼TV的教程

简明扼要,开始干活:

  • 打开qiniu.com注册个人开发者帐号
  • 申请直播空间

  • 这里有个坎儿,就是你得有一个备案的域名,域名备案的服务我这里提供,可以找我QQ 958226951

申请之后等待3-7天,就会有结果了,一般不会被拒绝的,你的邮箱会收到一封审核通过的邮件:

再次打开自己的七牛开发者面板,发现顶部有一个黄色的提示,让你马上体验直播,或者点击左侧列表的直播标识也可以进入配置界面。然后就是一系列的简单配置,都是顾名思义的配置,大家自己照着配就好,配置CName是比较重要的环节,共有6个CName需要你配置到自己的已备案域名下。

接下来我们添加一个自己的房间:

名称大家自己随便起,接下来我们记录一下需要记录的一些信息:

这样,七牛这边的工作就完成了,按理说,我们应该准备一台服务器进行房间的创建操作,但是这里为了先让大家跑通流程,就不搞的那么麻烦了,直接手动在这里创建一个拿来用。接下来我们创建两个新的工程用于测试,一个用于推流,另一个用于播放。

推流项目
1
pod 'PLMediaStreamingKit'

都是有开发经验的人,我也不多说,引入PLMediaStreamingKit作为推流库,接下来进行配置(由于我使用的是Swift,所以这里在桥接文件中引入PLMediaStreamingKit.h):

首先,在使用推流前无比初始化推流环境:

1
PLStreamingEnv.initEnv()

首先按照官方文档创建一个Stream对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 创建流对象
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的开发文档写的示例内容,由于我们没有自己的服务器,所以这里先随便填充一些内容,真正的使用我们刚才创建好的推流地址在后边,接下来创建一些基础的音视频,音视频流配置:

1
2
3
4
5
let videoCaptureConfiguration = PLVideoCaptureConfiguration.default()
let audioCaptureConfiguration = PLAudioCaptureConfiguration.default()
let videoStreamingConfiguration = PLVideoStreamingConfiguration.default()
let audioStreamingConfiguration = PLAudioStreamingConfiguration.default()

初始化推流Session并添加一个实时预览:

1
2
3
4
5
6
7
// 初始化Session
session = PLMediaStreamingSession(videoCaptureConfiguration: videoCaptureConfiguration, audioCaptureConfiguration: audioCaptureConfiguration, videoStreamingConfiguration: videoStreamingConfiguration, audioStreamingConfiguration: audioStreamingConfiguration, stream: stream)
// 添加预览
if let preView = session?.previewView {
view.addSubview(preView)
}

自行写一个按钮,在按钮动作中开始推流,这个时候写我们刚刚创建好房间的推流地址

1
2
3
self.session?.startStreaming(withPush: URL(string: "你的以rtmp开头的推流地址")!) {
print($0)
}

然后看日志输出,明白人能看的懂。

播放端
1
pod 'PLPlayerKit'

创建播放器:

1
let player = PLPlayer(liveWith: URL(string: "rtmp://pili-live-rtmp.devdylan.cn/leafedu/helloworld")!, option: PLPlayerOption.default())

上边是你播放推流的地址

然后添加到view上边,并设置代理:

1
2
3
4
5
// 设置代理
player?.delegate = self
if let playView = player?.playerView {
view.addSubview(playView)
}

接下来,实现代理方法:

1
2
3
4
5
6
7
8
9
10
11
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 )
}

第一个方法是状态发生变化的时候,后两个是遇到错误的时候,同样,自己添加一个按钮控制开始播放,播放的代码为:

1
self.player?.play()
测试

打开推流端,点击推流按钮开始推流,在播放端点击开始播放,就会看到直播已经建立了起来。在测试前需要注意的事项:

  • Xcode权限的申请

我们需要申请Camera以及MicroPhone的隐私权限:

包括ATS,网络的权限,接下来大家就可以测试了,在测试的过程中,可以在七牛的开发者平台查看实时信息:

可以在创建直播服务是绑定的空间内查看到直播的记录文件,保存的时长依你创建是选择的为准。
这样,我们大概用20分钟的时间就打通了直播流程。接下来按照业务需求搭建自己服务器通过七牛直播服务端SDK创建房间等等的事情交给大家自己了。

配置

Pili为大家提供了整套的移动视频直播SDK(Android与iOS),PLMediaStreamingKit同样提供了高阶的一些使用,比如说美颜,声音混响等操作。这里是一份开发指南,大家可以细阅,可以达到80%的业务需求。

评论