美文网首页
html5-直播

html5-直播

作者: blossom_绽放 | 来源:发表于2018-07-17 14:49 被阅读314次

    一直喜欢看斗鱼上面dota2比赛,突然有一天对直播很感兴趣,所以了解一下.

    流程

    pc端采集=> H264压缩 => 推流 => CDN => 播放

    协议

    HLS协议
    video <=> M3U8 => segment-1.ts
    M3U8是一个包含很多ts文件地址列表的文本文件,有2种类型
    全量列表: 点播使用,包含一段视频所有ts文件
    动态列表: 直播使用,动态更新ts文件地址
    简单的一个方案,比如斗鱼使用
    因为M3U8下面切片了几个ts文件,导致有延时,实时性不太好

    HTTP-FLV协议
    传送flv格式的视频,http长连接导致没有过多的延迟性
    比较综合的一种方案,B站使用

    video

    attribute

    controls 控制面板
    poster 第一帧贴图
    autoplay 自动播放
    muted 静音
    loop 循环播放
    preload 预加载

    var v = document.getElementById('video');
    
    // 音量控制
    v.volume = 0.5;
    // 播放时间控制
    v.currentTime = 60;// 单位:秒
    //播放地址切换
    v.src = './....MP4'
    

    event

    // loadstart
    v.addEventListener('loadstart', function (e) {
       //开始加载
    });
    // durationchange
    v.addEventListener('durationchange', function (e) {
      console.log('durationchange', v.duration);
    // 视频长度变化
    });
    // loadedmetadata
    v.addEventListener('loadedmetadata', function (e) {
      console.log('loadedmetadata');
    //加载数据
    });
    // loadeddata
    v.addEventListener('loadeddata', function (e) {
      console.log('loadeddata');
    //加载数据结束
    });
    // progress
    v.addEventListener('progress', function (e) {
      console.log('progress');
    // 加载片段...
    });
    // canplay
    v.addEventListener('canplay', function (e) {
      console.log('canplay');
    //可以播放
    });
    // canplaythrough
    v.addEventListener('canplaythrough', function (e) {
      console.log('canplaythrough');
    // 可以流畅播放
    });
    // play
    v.addEventListener('play', function (e) {
      console.log('play');
    //播放
    });
    // pause
    v.addEventListener('pause', function (e) {
      console.log('pause');
    //暂停
    });
    // seeking
    v.addEventListener('seeking', function (e) {
      console.log('seeking');
    // 播放跳转
    });
    // seeded
    v.addEventListener('seeked', function (e) {
      console.log('seeded');
    //跳转结束
    });
    // waiting
    v.addEventListener('waiting', function (e) {
      console.log('waiting');
    // 播放等待中
    });
    // playing
    v.addEventListener('playing', function (e) {
      console.log('playing');
    // 播放中
    });
    // timeupdate
    v.addEventListener('timeupdate', function (e) {
      console.log('timeupdate');
    // 当前播放时间变化
    });
    // ended
    v.addEventListener('ended', function (e) {
      console.log('ended');
    // 播放结束
    });
    // error
    v.addEventListener('error', function (e) {
      console.log('error', e);
    // 加载错误
    });
    

    推流

    # 安装nginx和rtmp模块
    brew install nginx-full --with-rtmp-module
    # 安装推流工具
    brew install ffmpeg
    # 安到哪了
     brew info nginx-full
    
    // 打开nginx配置
     http {
           server {
             listen  8080;
             location /hls {
                 # Serve HLS fragments
                 types {
                     application/vnd.apple.mpegurl m3u8;
                     video/mp2t ts;
                 }
                 root ...; # 同下方配置
                 expires -1;
             }
         }
         ……
     }
     // 在http节点后面加上rtmp配置:
     rtmp {
         server {
             listen 1935;
             chunk_size 4000;
             application rtmplive {
                 live on;
                 record off;
             }
            application hls {
                 live on;
                 hls on;
                 hls_path 绝对路径; # 对应上方root配置
                 hls_fragment 5s;
             }
         }
     }
    

    下载一个vlc播放器 File=> Open Network 输入rtmp://localhost:1935/rtmplive/...

    rtmp推流ffmpeg -re -i 1.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/rtmplive/...

    http推流ffmpeg -re -i 1.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/hls/...

    封装好的工具推流 ffmpeg -re -i 1.mp4 -c copy -f flv rtmp://localhost:1935/live/movie

    框架

    目前关于直播有3个成熟的框架

    video.js 全家桶框架,包含各种插件与ui样式

    hls.js 基于hls协议的直播框架,可以将不兼容hls协议的游览器支持hls协议,一个专注与内核的框架

    flv.js bilibili开源的http-flv协议的直播框架,用法与hls差不多

    相关文章

      网友评论

          本文标题:html5-直播

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