美文网首页
从零实现直播:开始之前

从零实现直播:开始之前

作者: Jiangyouhua | 来源:发表于2021-08-24 17:32 被阅读0次

    Hi,大家好,我是姜友华。
    接下来的几节,我们将一起来实现一个直播系统。直播协议我选择了WebRTC。为什么要选择WebRTC呢?我也不知道,可能是我比较喜欢Google公司吧。

    项目对应的代码放在git.hub上。按进程提交,有兴趣可以看看。同时也可以看看下面系列文件:

    1. Go的WebRTC库接口
    2. Go的WebSocket库接口
    3. Javascript的WebRTC库接口
    4. Javascript的WebSockets库接口
    5. Swift的WebRTC的原生实现
    6. Swift的WebSockets库接口

    主要内容:

    • 本案直播体系中我们需要实现哪些内容?
    • 搭建本地的HTTPS服务。

    我们要做哪些工作?

    虽然我说的是实现一个直播系统,但其实我们的工作并不多,我们只需要分步骤做到以下几点:

    1. 使用Go实现基于localhost的https请求。
    2. 使用WebSocket,实现peer to peer的信息发送。
    3. 使用WebRTC,实现peer to peer的音视频与信息发送。
    4. 添加iOS端的参与。
    5. 实现房间的分发。
    6. 对直播播放的抖动进行处理。
    7. 对录播视频的美化进行处理。

    由于我定的是使用WebRTC协议,那就意味着我们需要用到另外两个协议:HTTPS、WebSocket。其中HTTPS是入口,而WebSocket的使用则需要有HTTPS支持;同时WebRTC要实现Peer to Peer等功能则需要WebSocket支持。

    不说了那么多了,我们来看看工程的目录结构。

    > live
        > server
            > site
            . go.mod
            . main.go
        > client
            > live
    

    上面列表中,无后缀的是目录,有后缀的是文件。即我们建立了live工程,在工程里又创建了两个目录,分别用于服务端与客户端。服务端是Go实现,使用go.mod来管理包;客户端暂时只有iOS建立的live工程,如果后期有安卓工程将添加在该目录下;网页客户端在服务目录的site下。

    启用HTTP服务

    一、生成Loaclhost的ssl证书。

    在实现HTTPS服务前,我们需要通过Openssl生成Loaclhost证书:

    $ openssl genrsa -out server.key 2048
    Generating RSA private key, 2048 bit long modulus
    .................+++
    ......+++
    e is 65537 (0x10001)
    
    $   openssl req -new -x509 -key server.key -out server.crt -days 365
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) []:
    State or Province Name (full name) []:
    Locality Name (eg, city) []:
    Organization Name (eg, company) []:
    Organizational Unit Name (eg, section) []:
    Common Name (eg, fully qualified host name) []:localhost
    Email Address []:jingo1997@163.com
    
    $ ls
    go.mod          site            main.go         server.crt      server.key
    
    $ pwd
    /Users/jiangyouhua/code/system/live/server
    

    上面的操作分四步:

    1. 生成server.key。
    2. 从server.key生成server.crt:注意Common Name需要填写localhost,如是其它站点则填域名,如muutr.com。
    3. 查看要应文件是否成功生成。
    4. 获取当前目录路径。

    二、开启HTTP服务

    现在,我们可以使用Go来搭建史上最简的服务器。也是这个特性让我喜欢上了Go,并经常在示例中用它。

    /// main.go
    package main
    
    import (
        "log"
        "net/http"
    )
    
    func main() {
        keyFile := "/Users/jiangyouhua/code/system/live/server/server.key"
        certFile := "/Users/jiangyouhua/code/system/live/server/server.crtt"
        http.Handle("/", http.FileServer(http.Dir("./site/")))
        if err := http.ListenAndServeTLS(":443", certFile, keyFile, nil); err != nil {
            log.Fatalln(err)
        }
    }
    

    main函数里:

    1. 第一行、第二行,指定的是刚生成的两个证书。
    2. 第三行是所有http请求转到当前目录的site目录下,且只能处理文件。
    3. 最后部分,启用一个http监听服务,监听的接口是443.

    三、测试HTTPS服务

    在测试HTTPS服务之前,让我们在site目录下建一个index.html文件。

    /// index.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Live broadcast</title>
    </head>
    <body>
        Live broadcast
    </body>
    </html>
    

    建好后,现在运行main.go

    $ go run main.go
    

    不出意外的话,打开Chrome,输入https://localhost回车,会显示如下图:

    Screen Shot 2021-08-25 at 16.57.24.png

    因为没经第三方认证,所以Chrome不认我们生成的证书,从而拒绝显示页面内容。点击下面Advanced按钮,看有没有一个叫“Proceed to localhost (unsafe)”的链接。没有的话,那你需要安装设置证书。

    四、安装、设置server.crt

    安装、设置证书,需要执行以下步骤:

    1. 双击server.crt。这样server.crt会被安装在KeyChain Access里,名字为localhost。
    2. 在KeyChain Access里,双击localhost。这会打开Info面板。
    3. 在Info面板里,设置trust值为:Always Trust。关闭面板,确认个性即可。


      Screen Shot 2021-08-25 at 16.54.09.png

    五、确认本地HTTPS可用。

    现在再试试chrome。

    1. 刷新https://localhost/
    2. 点击Advanced,会示说明。
    3. 点击说明里的Proceed to localhost (unsafe)。
      即可显示如下:
      Live broadcast。

    恭喜你,本地HTTPS可用。下一节,我们可以将进入Live Broadcastt的征途。

    好,就到这里。我是姜友华,下一次,再见。

    相关文章

      网友评论

          本文标题:从零实现直播:开始之前

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