美文网首页
快速搭建属于自己的斗鱼TV

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

作者: Stark_Dylan | 来源:发表于2016-12-30 18:01 被阅读2114次

    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%的业务需求。

    相关文章

      网友评论

          本文标题:快速搭建属于自己的斗鱼TV

          本文链接:https://www.haomeiwen.com/subject/qjnmvttx.html