美文网首页javascriptNode.js专题RTMP直播
使用flv.js与video.js实现播放视频直播(简教程)

使用flv.js与video.js实现播放视频直播(简教程)

作者: 关爱单身狗成长协会 | 来源:发表于2017-12-01 18:40 被阅读3714次

    推荐教程:《使用flv.js做直播》

    1.准备

    1.下载 nginx
    2.下载 livego
    3.下载 OBS
    4.引用 flv.js
    5.引用 video.js

    ( ̄▽ ̄)/ 以上软件请大家自行解压或安装

    2.环境配置

    首先运行livego

    运行livego效果

    安装与运行OBS
    打开设置 配置流服务器

    配置连接


    配置连接

    连接成功后livego会有提示


    提示 载入源 效果

    进入nginx下的html目录,新建个index1.htmlindex2.html
    然后运行 nginx (运行前自行修改nginx端口)

    2.使用flv.js实现直播播放

    之前我写过教程《flv.js简单使用示例
    吧之前的代码稍作修改

    代码:

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <title>flv.js demo</title>
        <style>
            .mainContainer {
                display: block;
                width: 1024px;
                margin-left: auto;
                margin-right: auto;
            }
    
            .urlInput {
                display: block;
                width: 100%;
                margin-left: auto;
                margin-right: auto;
                margin-top: 8px;
                margin-bottom: 8px;
            }
    
            .centeredVideo {
                display: block;
                width: 100%;
                height: 576px;
                margin-left: auto;
                margin-right: auto;
                margin-bottom: auto;
            }
    
            .controls {
                display: block;
                width: 100%;
                text-align: left;
                margin-left: auto;
                margin-right: auto;
            }
        </style>
    </head>
    <body>
        <div class="mainContainer">
            <video id="videoElement" class="centeredVideo" controls autoplay width="1024" height="576">Your browser is too old which doesn't support HTML5 video.</video>
        </div>
        <br>
        <div class="controls">
            <!--<button onclick="flv_load()">加载</button>-->
            <button onclick="flv_start()">开始</button>
            <button onclick="flv_pause()">暂停</button>
            <button onclick="flv_destroy()">停止</button>
            <input style="width:100px" type="text" name="seekpoint" />
            <button onclick="flv_seekto()">跳转</button>
        </div>
        <script src="./flv.js/flv.min.js"></script>
        <script>
            var player = document.getElementById('videoElement');
            if (flvjs.isSupported()) {
                var flvPlayer = flvjs.createPlayer({
                    type: 'flv',
                    "isLive": true,//<====加个这个 
                    url: 'http://127.0.0.1:7001/live/movie/a.flv',//<==自行修改
    
                });
                flvPlayer.attachMediaElement(videoElement);
                flvPlayer.load(); //加载
                flv_start();
            }
    
            function flv_start() {
                player.play();
            }
    
            function flv_pause() {
                player.pause();
            }
    
            function flv_destroy() {
                player.pause();
                player.unload();
                player.detachMediaElement();
                player.destroy();
                player = null;
            }
    
            function flv_seekto() {
                player.currentTime = parseFloat(document.getElementsByName('seekpoint')[0].value);
            }
        </script>
    </body>
    
    </html>
    

    访问http://127.0.0.1/index1.html

    如果浏览器开始播放视频那说明你已经成功

    效果

    3.使用video.js实现直播播放(HLS)

    根据livego教程

    教程

    那么 video.js 的播放地址应该是 http://127.0.0.1:7002/live/movie/a.m3u8

    但是实际测试时失败了罒ω罒

    所以就使用 ffmpeg 将RTMP转为HLS 放到nginx的html目录下

    ffmpeg命令参考:

    ffmpeg -i rtmp://127.0.0.1:1935/live/movie/a -c copy -f hls -hls_time 5.0 -hls_list_size 0 -hls_wrap 15 ../html/a.m3u8
    
    ffmpeg

    代码:

    <html>
    <head>
        <title>demo</title>
        <meta charset="utf-8">
        <link href="https://unpkg.com/video.js/dist/video-js.css" rel="stylesheet">
        <script src="https://unpkg.com/video.js/dist/video.js"></script>
        <script src="https://unpkg.com/videojs-contrib-hls/dist/videojs-contrib-hls.js"></script>
    </head>
    
    <body>
        <video id="example_video_1" class="video-js vjs-default-skin" controls preload="none" width="640" height="264" data-setup="{}">
            <source src="./a.m3u8" type='application/x-mpegURL'>
            <!-- <source src="http://127.0.0.1:7002/live/movie/a.m3u8" type='application/x-mpegURL'> -->
        </video>
        <script type="text/javascript">
            var myPlayer = videojs('example_video_1');
            videojs("example_video_1").ready(function () {
                var myPlayer = this;
                myPlayer.play();
            });
        </script>
    </body>
    
    </html>
    
    效果

    相关文章

      网友评论

      • 4f020d98d743:博主,能详细说说nginx怎样设置吗?你的html文件是放在nginx的文件夹下的index1.html吗?我打开http://127.0.0.1/index1.html,看不到推流,打开console报出Failed to load resource: the server responded with a status of 404 (Not Found)
        关爱单身狗成长协会:@tcap99 1~2S延时很正常的如果希望低延时 要对 录制、 推流、转码参数调节 比如:录制分辨率大小 清晰度 声音 转码的缓存大小 流格式 还有网速等等
        4f020d98d743:@关爱单身狗成长协会 谢谢博主,现在看到推流了,但存在1s~2s的延迟,有什么解决的方法吗?
        关爱单身狗成长协会:nginx 只是作为静态文件服务器 我用的是默认设置 。而且你看不到 推流 跟 nginx 没关系 404就是 访问地址不对 看看你推流地址 是示例代码里面的 `'http://127.0.0.1:7001/live/movie/a.flv',//<==自行修改` 吗?
      • 阴天_23df:第三个方案的url地址是本地地址还是http://127.0.0.1:7002/live/movie/a.m3u8
        关爱单身狗成长协会:@阴天_23df `-c:a copy -c:v libx264 -s 320*240 -vpre slow -f flv ` 试试
        阴天_23df:@关爱单身狗成长协会 ffmpeg -re -i “地址” -vcodec copy -s 320*240 -acodec copy -f flv rtmp://localhost:1935/live/movie

        这是我的命令 但是输出的视频的分辨率不是320*240 而是2560*1440 太大了。我想改小一点
        关爱单身狗成长协会:写在代码里了呀 因为 生成的 文件与html 文件在一个目录 所以直接 <source src="./a.m3u8" type='application/x-mpegURL'>
      • 腹黑小飞侠:楼主好,看了您的文章收货很大,我现在吧livego启动了,然后用OBS推流的时候,livego这边一直报错:rtmp.go:118: CheckAppName err: application name=%s is not configure。
        腹黑小飞侠:楼主,你之前执行main的时候是不是带了两个参数?分别是什么啊?
        现在变成livego了,然后那俩参数貌似在配置里写进去了。
        腹黑小飞侠:我刚下的这个貌似版本更新了,我在OBS里也设置的a,但是不行,我把CheckAppName这个函数返回值直接改成true了:sweat: ,然后现在又提示一个no static push url错误
        关爱单身狗成长协会:OBS 推配置流服务器的应用名称有配吧(我教程示例使用的是名称 'a')如果配了查看下名称那里有没有出现特殊符号之类的
      • 4f5a192ebeab:楼主您好,我按照您的这篇文章进行了一些尝试,但是不知a.flv是从何产生如何设置的?
        关爱单身狗成长协会:运行了 livego 后 会自动根据你配置的路由创建出来,比如我在OBS 流名称设置成a,到了livego 出来就可以用 a.flv 了

      本文标题:使用flv.js与video.js实现播放视频直播(简教程)

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