欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

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

见附件 


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

2字数 291阅读 43,612

推荐教程:《使用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

顺便说下 好像 dplayer播放器 也是可以的

代码:

<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>
效果
34人点赞
"小礼物走一走,来简书关注我"
还没有人赞赏,支持一下
关爱单身狗成长协会一条流浪狗 码云:git.oschina.net/baojuhua
总资产184 (约8.56元)共写了5.4W字获得842个赞共673个粉丝



全部评论17只看作者
按时间倒序
按时间正序

10楼 
留名
 赞 回复
9楼 
楼主请问下配置完OBS后没livego没反应怎么解决?
 赞 回复
8楼 
你好请问ios端如何解决
 赞 回复
7楼 
可太牛了:clap:
 赞 回复
6楼 
楼主,为什么执行flv_destroy()函数的时候报unload is not a function,这个怎么解决?
 赞 回复
5楼 
博主,能详细说说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)
 赞 回复
@关爱单身狗成长协会 谢谢博主,现在看到推流了,但存在1s~2s的延迟,有什么解决的方法吗?
 回复
@tcap99 1~2S延时很正常的如果希望低延时 要对 录制、 推流、转码参数调节 比如:录制分辨率大小 清晰度 声音 转码的缓存大小 流格式 还有网速等等
 回复
@关爱单身狗成长协会 谢谢博主回答:smiley:
 回复
 添加新评论
3楼 
楼主好,看了您的文章收货很大,我现在吧livego启动了,然后用OBS推流的时候,livego这边一直报错:rtmp.go:118: CheckAppName err: application name=%s is not configure。
 赞 回复
OBS 推配置流服务器的应用名称有配吧(我教程示例使用的是名称 'a')如果配了查看下名称那里有没有出现特殊符号之类的
 回复
我刚下的这个貌似版本更新了,我在OBS里也设置的a,但是不行,我把CheckAppName这个函数返回值直接改成true了:sweat: ,然后现在又提示一个no static push url错误
 回复
楼主,你之前执行main的时候是不是带了两个参数?分别是什么啊?
现在变成livego了,然后那俩参数貌似在配置里写进去了。
 回复
 添加新评论还有1条评论,查看更多
2楼 
楼主您好,我按照您的这篇文章进行了一些尝试,但是不知a.flv是从何产生如何设置的?
 赞 回复
flv.min.js:6 [TransmuxingController] > DemuxException: type = CodecUnsupported, info = Flv: Unsupported audio codec idx: 1

console输出这个错误
 回复
@闪耀唐暖暖 +1,请问你最后如何解决的?

来自  https://www.jianshu.com/p/d9c66d7d1653

附件大小
Package icon flv.js-master.zip183.34 KB
普通分类: