2021-04-09

基础知识

直播协议

RTMP:Real Time Messaging Protocol,协议基于 TCP,是一个协议族。不过使用这种协议,必须安装flash,而H5、IOS、Android并不能原生支持flash。

FFMpeg工具

一:FFmpeg:命令参考:http://www.ruanyifeng.com/blog/2020/01/ffmpeg.html

二:安装windows包管理工具:首先以管理员身份运行命令:@”%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe” -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command “iex ((New-Object System.Net.WebClient).DownloadString(‘https://chocolatey.org/install.ps1‘))” && SET “PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin”

出现如下,代表安装成功chocolate包管理工具

这里写图片描述

三:再通过这个安装ffmpeg: choco install ffmpeg

视频本身是一个容器,包括视频,音频也可能有字幕。视频文件后缀:MP4,MKV,WebM,AVI

视频编码:视频和音频都需要经过编码,才能保存成文件。不同的编码格式(CODEC),有不同的压缩率,会导致文件大小和清晰度的差异。

<audio controls >        //可以设置多个播放源,可兼容不同播放器,同时也可以选择压缩比更小的音频文件播放
    <source src="test.mp3">
    <source src="test.ogg">
</audio>

生成ogg音频文件方式:

生成ogv视频文件方式

ffmpeg -i test.mp4 test.ogv

WebRTC技术

浏览器之间如何建立p2p连接? 如果两个浏览器无公网处于各自的局域网内,且路由器运行NAT技术

在这里插入图片描述

若路由器不允许内部主机建立对外连接

An interaction between two users of a WebRTC application involving STUN and TURN servers.

自建STUN TURN服务器

const stun = require('stun')                      //首先:使用谷歌的stun服务器
stun.request('stun.l.google.com:19302',(err,res)=>{
    if (err){
        console.error(err);
    }else {
        const {address} = res.getXorAddress();
        console.log('your ip',address)
    }
})

搭建Rtmp + Nginx的直播服务器

yum -y install wget         //安装必要的依赖
yum -y install gcc gcc-c++

wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz
tar -zxvf pcre-8.33.tar.gz 
cd pcrexxx
./configure 
make && make install

wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz
tar -zxvf
cd openxx
./config
make && make install
//同理安装zlib
wget http://zlib.net/zlib-1.2.11.tar.gz


//安装nginx,wget命令下载安装包。解压进入
cd nginx-1.8.0oyu
yum -y install openssl openssl-devel
./configure --add-module=../nginx-rtmp-module-1.2.1
make && make install

//会发现上层目录多了一个nginx文件夹,不同于nginx-1.8.0
#  输入命令  /usr/local/nginx/sbin/nginx -V
## nginx version: nginx/1.8.0
## built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
## built with OpenSSL 1.0.2k-fips  26 Jan 2017
## TLS SNI support enabled
## configure arguments: --add-module=../nginx-rtmp-module-1.2.1

//进入目录/usr/local/nginx/sbin下
 # ./nginx 启动nginx服务器

修改nginx.conf文件,在最外层加如下内容。

rtmp {
server {
listen 1935; #监听的端口
chunk_size 4000;
application dinhao {#rtmp推流请求路径,路径错了会推不上流
live on; #开启实时
hls on;  #开启hls
hls_path /usr/local/nginx/html/dinhao; #rtmp推流请求路径,文件存放路径
hls_fragment 5s; #每个TS文件包含5秒的视频内容
}
}
}
http{
	server{          #添加如下内容,生成m3u8文件以播放
		    location /dinhao {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            autoindex on;
            alias /usr/local/nginx/html/dinhao;
            expires -1;
            add_header Cache-Control no-cache;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
        }


	}
}


之后重启 ./nginx -s reload


使用OBS+VLC推拉流

OBS设置推流地址

在这里插入图片描述

使用VLC拉流时:拉流地址(PotPlayer同理)

在这里插入图片描述

如何在网页播放呢?

移动端 iOS 和 Android 都天然支持HLS协议,做好视频采集端、视频流推流服务之后,便可以直接在H5页面配置 video 标签播放直播视频, HLS 在 PC 端仅支持safari浏览器,类似chrome浏览器使用HTML5 video标签无法播放 m3u8 格式,可直接采用网上一些比较成熟的方案

注意:网页端如果播放 rtmp 或者 flv 形式 的直播流,需要flash插件支持,由于手机web端基本无法调用flash插件,所以手机web端一般使用hls(即m3u8)的形式进行直播。

解决方案

一:chimee插件

<body>
<script src="http://lib.baomitu.com/chimee-player/1.1.10/chimee-player.browser.js"></script>

<div id="wrapper" ></div>
<script>
    new ChimeePlayer({
        wrapper: '#wrapper', // video dom容器
        src: 'http://192.168.211.128/dinhao/123.m3u8',
        box: 'hls',
        isLive: true,
        autoplay: true,
        controls: true
    });
</script>

</body>

也可以达到在网页端播放rtmp+Nginx推的流,可以播放m3u8文件
在这里插入图片描述

第二种:video.js+hls.js

<!DOCTYPE html>
<html>
<head>
    <meta charset=utf-8 />
    <title>videojs-contrib-hls embed</title>

    <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>
<h1>Video.js Example Embed</h1>

<video id="my_video_1" class="video-js vjs-default-skin" controls preload="auto" width="640" height="268"
       data-setup='{}'>
    <source src="http://192.168.211.128/dinhao/123.m3u8" type="application/x-mpegURL">
</video>

</body>
</html>

出现错误

在这里插入图片描述

需要通过防火墙开放对外端口,vi /etc/sysconfig/iptables 添加如下

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

重启防火墙

systemctl restart iptables.service
systemctl stop iptables.service       //关闭防火墙

查看80端口被占用的进程

lsof -i:80

通过kill命令干掉该进程

kill -9 进程号
server {
    listen 1000;
    
    location /stat { # http://ip:1000/stat, 监控流的地址 
        rtmp_stat all;  
        rtmp_stat_stylesheet stat.xsl;
    }  
  
    location /stat.xsl {
        root /www/server/nginx-rtmp-module/;  
    }

    location /hls { # http拉流的地址,http://ip:1000/hls/密钥.m3u8
        # Serve HLS fragments
        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t ts;
        }
        root /www/tmp;
        expires -1;
        add_header Cache-Control no-cache;
        add_header Access-Control-Allow-Origin *;
    }
}

相关知识

直播模型

img

技术点:

视频编码:FFmpeg

直播流服务器:SRS

播放器:网页端Video.js,安卓的Vitamio

img

img

RTMP:Real Time Messaging Protocol:流媒体传输协议,基于UDP,常用于视频分发场景,直播

WebRTC:Web Real-Time Communication:连麦互动。

HLS(HTTP Live Streaming)协议播放直播流: .m3u8 的文件,这个文件就是基于 HLS 协议,存放视频流元数据的文件。

HTML5视频直播技术:https://blog.51cto.com/11460674/2117551

直播服务器

nginx+rtmp+module+ffmpeg(转码之类的处理)

SRS FMS RED5

推流软件

OBS:借助这个软件,电脑可实现推流。

s


注意点

传统的HTTP长连接:客户端和服务器端不断Request和Response,很容易断或者收不到


流程

推流端:采集,编码,推流

服务端处理:转码

播放器:拉流,解码。渲染

互动系统:聊天室,

Live CLient:REACT语言写的,Socket通信,用户的加入,退出,发消息,播放器配置。

Live Server:房间的进入,退出,转发消息


参考教程

①:https://www.bilibili.com/video/BV1SJ411k7v2?from=search&seid=3818859015184664397

②:https://www.jianshu.com/p/a9b03112d21d

③:https://www.cnblogs.com/surplus/p/12630077.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值