美文网首页iOS关注iOS学习
直播专题问答(一)

直播专题问答(一)

作者: 小苗晓雪 | 来源:发表于2016-10-31 19:13 被阅读278次

    提问:

    • day01:
      • 1、何为直播?何为点播?
      • 2、简述推流、拉流的工作流程?
      • 3、常见的直播协议有哪些?之间有什么区别?
      • 4、常见的点播协议有有哪些?
      • 5、何为Nginx?有什么特点?
      • 6、何为homebrew?你用它安装过什么?常用命令有哪些?
      • 7、ffmpeg是什么?
      • 8、RTMP、HLS协议各自的端口号是?
      • 9、m3u8构成是?直播中m3u8、ts如何实时更新?
      • 10、音视频的编解码器分别是什么?
      • 11、简述如何在Mac上搭建本地直播服务器?

    回答:

    • 1、我认为:直播是一个三方交互(主播、服务器、观众),这个交互式实时的!尽管会根据选择的协议不同而有一些延迟,但我们仍认为它直播是实时的!--->主播在本地发送音视频给服务器(推流),观众从服务器实时解码(拉流)收看收听主播发送给服务器的音视频(直播内容)。直播是不能快进的!
      点播:首先一定要明确的一点,点播不存在推流这一过程,你本身你的流已经早就推给服务器了,或者这么说也不对,应该是你的音视频早就上传到了服务器,观众只需要在线收看即可,由于你的音视频上传到了服务器,观众则可以通过快进,快退,调整进度条等手段各种收看!

    • 2、推流:在直播中,主播方向服务器发送请求,向服务器推送自己正在实时直播的内容,而这些内容在推送到服务器的这一过程中是以 “流” 的形式传递的,这就是“推流”,把音视频数据以流的方式推送(或上传)到服务器的过程就是“推流”!主播方的音视频往往会很大,在推流的过程中首先按照 acc音频-编码 和 h264视频-编码的内部把主播推过来的音视频压缩,然后合并成 MP4或者 FLV格式,然后遵守直播的封装协议,最后传给服务器完成推流过程!
      拉流与推流正好相反,拉流是观众从服务器获取主播推流给服务器的音视频的过程,这就是“拉流”!拉流首先acc音频-解码 和 h264视频-解码的内部把主播推过来的音视频解压缩,然后合成 MP4或者 FLV 格式,再解封装,最后到我们的客户端与观众进行交互!

    总结来看,拉流与推流就是因为音视频太大了!不方便原封不动的直接“生传”给服务器,而且天下主播千千万每天跟新闻联播似的准时准点儿的访问我的服务器!!!地主家也揭不开锅啊!!!服务器宝宝苦,但是宝宝不说~宝宝直接崩溃!!!

    • 3、常见的直播协议有三种 RTMP、HLS、FLV...

      • 1、RTMP:real time messaging protocol实时传输协议该协议功能庞大,即可以用来推送也可以用于直播,从主播方推流到服务器会用到这个协议!RTMP 的端口号为1935;
      • 2、FLV:adobe 公司出品必属精品!flash video:体积小,传输速度快!adobe 主推!
      • 3、HLS:苹果原生:HTTP Live Streaming,遵循的是 HTTP 超文本传输协议,端口号8080,是未来的趋势!
    • 4、常见的点播协议有三种:MP4、FLV、HLS:

      • 1、MP4:应用广泛,App 大都支持,网页支持也很好,但是内部结构复杂,体积较大,处理成本较高,在线播放会较慢;
        -2、FLV:必须要 App 播放,加载进度较慢;
        -3、苹果原生,精简的m3u8的索引结构可以规避MP4的索引慢问题,适合点播;
    • 5、Nginx 是一个遵循 HTTP 协议的服务器!内存占用少,并发能力强!

    • 6、homebrew是一个 Mac系统下所独有的套件管理器,我要做直播,需要 rtmp 和 nginx ,单独安装很复杂,只要在终端里输入简单的安装相应的套件命令即可完成安装,复杂的过程都靠 homebrew 规避掉了!
      我用它安装过很多东西,比如今天的 nginx 搭建服务器等。
      常用命令:brew install 、brew uninstall、brew search、brew list、brew update、brew help 等~

    • 7、FFmpeg是一套用来记录和转换数字音视频,并能将其转化为流的开源计算机程序。拉流和推流离不开 FFmpeg 的帮助!

    • 8、RTMP端口号:1935-----HLS:8080;

    • 9、m3u8:是一个播放列表,通过ffmpeg将本地的xxx.mp4进行切片处理,生成m3u8播放列表(索引文件)和N多个 .ts文件,并将其(m3u8、N个ts)放置在本地搭建好的webServer服务器的指定目录下,我就可以得到一个可以实时播放的网址,我们把这个旺旺号资复制到 VLA 上可以实时观看!
      在 HLS 流下,本地视频被分割成一个一个的小切片,一般10秒一个,这些个小切片被 m3u8管理,并且随着终端的ffmpeg 向本地拉流的命令而实时更新,影片进度随着拉流的进度而更新,播放过的片段不在本地保存,自动删除,直到该文件播放完毕或停止,ts 切片会相应的被删除,流停止,影片不会立即停止,影片播放会滞后于拉流一段时间,

    • 10、音频的编解码器是acc: Advanced Audio Coding,高级音频编(解)码器;
      视频的编解码器是:H264(libx264);

    • 11、在 Mac 上搭建本地服务器:

      • 1、安装 homebrew;
    • 2、执行命令:brew tap homebrew/nginx 和 brew -install nginx-full --with-rtmp-module-->安装nginx,并带有rtmp-module直播流模块从而完成安装

    • 3、进入网址:http://localhost:8080 验证nginx开启状态;如果安装成功会显示欢迎来到 nginx!哈哈哈~

    • 4、启动 nginx!在终端执行 nginx 命令!

    • 5、配置nginx.conf--->
      添加如下代码块:

    rtmp {
    
      server {
            listen 1935;
            chunk_size 4000;
    
            # RTMP 直播流配置
            application rtmplive {
                live on;
                #为 rtmp 引擎设置最大连接数。默认为 off
                max_connections 1024;
            }
    
            # HLS 直播流配置
            application hls{
                live on;
                hls on;
                hls_path /usr/local/var/www/hls;
                hls_fragment 5s;
            }
           }
          }
    
    location /hls {
                # Serve HLS fragments
                types {
                    application/vnd.apple.mpegurl m3u8;
                    video/mp2t ts;
                    }
                root /usr/local/var/www;
                add_header Cache-Control no-cache;
            }
    
    • 6、ffmpeg推流至nginx:可以推两种流:

      • 1、RTMP流,推流至rtmplive;
      • 2、HLS流,推流至hls;
    • 7、补充内容:

      • 1、其中,HLS流表现较明显,在nginx的临时目录下,直观的可看到m3u8索引文件和N多个.ts文件。m3u8列表会实时更新,且会动态更改当前播放索引切片(.ts)。这种实时更新的机制,不会使得.ts文件长时间存在于Nginx服务器上,且当推流结束之后,该目录下的内容会被全部清除,这样无形中减缓了nginx服务器的压力。另外,也阐释了HLS这种流媒体播放相较RTMP延时较高的原因。
    欢迎小伙伴儿们对本篇文章积极讨论,大家相互学习!

    相关文章

      网友评论

        本文标题:直播专题问答(一)

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