出口家具东莞网站建设,网站建设制作小程序开发,免费推广方法有哪些,郑州网站建设zzjisu一、前言
目前#xff0c;全球直播带货什么的#xff0c;成为主流#xff0c;那如何自己搭建一个直播服务器呢。首先需要一个流媒体服务器#xff0c;搭建流媒体有很多种方式#xff0c;如下#xff1a;
流媒体解决方案 Live555 #xff08;C#xff09;流媒体平台框…一、前言
目前全球直播带货什么的成为主流那如何自己搭建一个直播服务器呢。首先需要一个流媒体服务器搭建流媒体有很多种方式如下
流媒体解决方案 Live555 C流媒体平台框架 EasyDarwin C国产精品实时流媒体播放服务器程序DarwinStreamingSrvr C)Flash流媒体服务器 Red5 Java流媒体服务器 Open Streaming Server JavaFMS流媒体服务器 Adobe收费的Wowza流媒体服务器Java开源流媒体平台FreeCastJavaNgixRTMP插件SRSOBS
这里介绍国产开源流媒体服务器 SRS 的搭建及使用。
SRS简介
SRS(Simple Realtime Server)是一个简单高效的实时视频服务器 是国人写的一款非常优秀的开源流媒体服务器软件可用于直播/录播/视频客服等多种场景其定位是运营级的互联网直播服务器集群。
支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181。
官方网站http://ossrs.net/lts/zh-cn/
目前版本为SRS4属于稳定版可用于生产环境
二、SRS安装
官方文档http://ossrs.net/lts/zh-cn/docs/v4/doc/getting-started
安装主要有docker和源码安装两种方式都很简单。
官方推荐使用Docker启动SRS这是最简单也是最方便的方式。 由于后续有些内容经常需要动到配置文件所以我这里选择用源码安装的方式。
1下载源码
git clone -b 4.0release https://gitee.com/ossrs/srs.git2编译注意需要切换到srs/trunk目录
cd srs/trunk
./configure
make3启动服务器
./objs/srs -c conf/srs.conf4检查服务器状态
检查SRS是否成功启动可以打开 http://localhost:8080/ 如我这里服务器地址为192.168.152.100。所以浏览器输入http://192.168.152.100:8080/即可访问。 当然也可以用命令检查服务器状态。
# 查看SRS的状态
./etc/init.d/srs status# 或者看SRS的日志
tail -n 30 -f ./objs/srs.log如下图看到下面提示为正常启动。
SRS(pid 29588) is running. [ OK ]三、OBS推流RTMP
推流可以选择FFmpeg或者OBS如果对FFmpeg命令比较熟可以选择这个占用资源更少。
我这里选择OBS因为界面话更友好直观。
OBS下载地址https://obsproject.com/download
1直播画面选择
在来源中选择要推送的画面如果有摄像头或者摄像机则添加“视频采集设备”然后选择相应的摄像头名称即可。
我这里没摄像头选择自己的电脑桌面直播推送及“显示器采集”。
2设置流媒体服务器
在右下方的 设置 推流 服务 自定义。
填写流媒体服务器地址我这里是 rtmp://192.168.152.100/live/ 串流密钥随便填写即可这里我填写的是test-livestream。 所以最后播放地址为rtmp://192.168.152.100/live/test-livestream 3推送直播画面
配置完成后点击 “开始推流” 即可推送画面。没有报错说明推送成功同时下方会有相关信息如cpu之类的。 在浏览器 http://192.168.152.100:8080/ 打开控制台可以看到推送的流信息。 点击预览可以看到刚才的推送画面了。后面加flv是因为推流拉流都是用的RTMP。 所以RTMP流的播放地址为rtmp://192.168.152.100/live/test-livestream.flv 4VLC 播放器
VCL是一个很强大的播放器支持播放网络串流。
所以可以直接用VCL播放测试。
下载地址https://www.videolan.org/index.an.html
下载安装后打开 媒体 打开网络串流输入播放地址即可观看直播画面。
四、RTMP低延时配置
以上基本的直播推流拉流配置完成。但是测试延迟还是很大。 根据直播画面和本地时间对比可以发现延迟差不多有6秒左右不是很正常。RTMP流正常延迟时间为1到3秒左右所以还需要配置。
1默认配置文件
由于我们以默认的配置文件启动即srs.conf 这个配置文件。默认配置文件如下
ubuntuubuntu:~/srs/trunk$ cat conf/srs.conf
# main config for srs.
# see full.conf for detail config.listen 1935;
max_connections 1000;
#srs_log_tank file;
#srs_log_file ./objs/srs.log;
daemon on;
http_api {enabled on;listen 1985;
}
http_server {enabled on;listen 8080;dir ./objs/nginx/html;
}
rtc_server {enabled on;listen 8000; # UDP port# see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidatecandidate $CANDIDATE;
}
vhost __defaultVhost__ {hls {enabled on;}http_remux {enabled on;mount [vhost]/[app]/[stream].flv;}rtc {enabled on;# see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtcrtmp_to_rtc off;# see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmprtc_to_rtmp off;}
}2更改配置文件
根据官方文档可以更改配置文件低延迟配置在vhost __ defaultVhost __ 添加以下配置。具体原理可以参考官方文档。 tcp_nodelay on;min_latency on;play {gop_cache off;queue_length 10;mw_latency 100;}publish {mr off;}最终配置文件为
listen 1935;
max_connections 1000;
#srs_log_tank file;
#srs_log_file ./objs/srs.log;
daemon on;
http_api {enabled on;listen 1985;
}
http_server {enabled on;listen 8080;dir ./objs/nginx/html;
}
rtc_server {enabled on;listen 8000; # UDP port# see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidatecandidate $CANDIDATE;
}
vhost __defaultVhost__ {hls {enabled on;}http_remux {enabled on;mount [vhost]/[app]/[stream].flv;}rtc {enabled on;# see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtcrtmp_to_rtc off;# see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmprtc_to_rtmp off;}tcp_nodelay on;min_latency on;play {gop_cache off;queue_length 10;mw_latency 100;}publish {mr off;}
}3重载配置文件测试
配置完成后reload重载配置完成。
./etc/init.d/srs reload然后再次用obs推流拉流查看效果延迟为2秒左右在正常延迟范围内。
五、RTMP推流webRTC拉流RTMP to RTC
上面测试有2秒的延迟有没有更低延迟呢。有就是webRTC。
webRTC起初用于视频会议等及时通讯现在越来越成熟应用也越多正常延迟为1秒之内。
1更改配置文件
默认配置文件有rtc的选项是打开的我们是RTMP to RTC所以还需要把rtmp_to_rtc off 改成 rtmp_to_rtc on即可。 rtc {enabled on;# see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtcrtmp_to_rtc on;# see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmprtc_to_rtmp off;}还有重要的一点rtc_server里的candidate配置。如果是服务器是云服务器之类的。必须将 $CANDIDATE 更改为公网IP或者0.0.0.0任何IP可访问。我这里内网测试所以无需更改。
rtc_server {enabled on;listen 8000; # UDP port# see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidatecandidate $CANDIDATE;
}2重载配置测试
./etc/init.d/srs reload由于vcl不支持webRTC格式串流所以直接用控制台自动的webRTC播放器查看。 播放地址为webrtc://192.168.152.100/live/test-livestream
同时打开直播画面和本地画面。 可以看到延迟在1秒之内基本在500毫秒左右。
六、HLS流
HLS流作为直播正常延迟10秒起步所以也不推荐使用。如果要配置。 只需在默认配置文件中添加如下即可原来只有一行enabled on; hls {enabled on;hls_path ./objs/nginx/html;hls_fragment 10;hls_window 60;}重载配置后可用vcl播放器地址http://192.168.152.100:8080/live/test-livestream.m3u8
延迟太大可自行测试。
七、DVR录制
OBS也可以直接录制但是有些需求需要在服务器上直接录制文件如API需求所以在服务器开启DVR即可。
1更改配置文件
SRS支持将RTMP流录制成FLV或MP4文件。 DVR作为SRS3的核心功能永远开启DVR只需要在配置文件的 vhost defaultVhost 加入以下内容即可
dvr {enabled on;dvr_apply all;dvr_plan segment;dvr_path ./objs/nginx/html/[app]/[2006]/[01]/[stream]-[02]-[15].[04].[05].[999].mp4;dvr_duration 30;dvr_wait_keyframe on;time_jitter full;}参数说明
dvr_apply DVR的apply决定了是否对某个流开启dvr默认的all是对所有开启dvr_plan 可配置session和segmentsession就是推流到停止推流为整段视频保存dvr_duration参数不生效。segment为分段报错和dvr_duration、dvr_wait_keyframe搭配使用。dvr_duration录制每个片段时常如30为30秒一个片段。dvr_wait_keyframe按关键帧切。time_jitter: 时间戳抖动算法。full使用完全的时间戳矫正zero只是保证从0开始off不矫正时间戳。dvr_path 文件报错路径及命令方式。
2自定义DVR的路径和文件名
以上默认即可主要参数 dvr_path 按自己需要改格式。
1没有变量SRS1.0方式自动添加[stream].[timestamp].flv作为文件名
dvr_path ./objs/nginx/html/[app]/[stream].[timestamp].flv;
#生成的文件名及路径
./objs/nginx/html/live/livestream.1420254068776.flv;2按流和年月日分目录时间作为文件名
dvr_path ./objs/nginx/html/[app]/[stream]/[2006]/[01]/[02]/[15].[04].[05].[999].flv;
#生成的文件名及路径
./objs/nginx/html/live/livestream/2015/01/03/10.57.30.776.flv;3按流和年月分目录日和时间作为文件名
dvr_path ./objs/nginx/html/[app]/[stream]/[2006]/[01]/[02]-[15].[04].[05].[999].flv;
#生成的文件名及路径
./objs/nginx/html/live/livestream/2015/01/03-10.57.30.776.flv;4按vhost/app和年月分目录流名称、日和时间作为文件名
dvr_path ./objs/nginx/html/[app]/[2006]/[01]/[stream]-[02]-[15].[04].[05].[999].flv;
#生成的文件名及路径
./objs/nginx/html/live/2015/01/livestream-03-10.57.30.776.flv;5按app分目录流和时间戳作为文件名SRS1.0方式
dvr_path ./objs/nginx/html/[app]/[stream].[timestamp].flv;
#生成的文件名及路径
./objs/nginx/html/live/livestream.1420254068776.flv;如果需要录制MP4格式的就把flv后缀改成mp4即可。
3查看录制的文件
改成后重载配置
./etc/init.d/srs reload过一段时间可以在./objs/nginx/html/live/2022/09/ 看到生成的文件。
下载任意一个文件播放可以看到录制的时间30秒左右。
4Http Callback
服务器端定制的实现方式就是HTTP回调。如需要api回调的方式获取dvr在配置文件加入以下即可。 http_hooks {enabled on;on_dvr http://127.0.0.1:8085/api/v1/dvrs;}更详细的可自行参考官方文档HTTP Callback
八、小结
以上基本的使用及搭建就完成了如果还需要功能可自行参考官方文档。
引用官方的那句话
对于新手来说音视频的门槛真的非常高SRS的目标是降低不能消除音视频的门槛所以请一定要读完Wikihttps://ossrs.net/lts/zh-cn/docs/v4/doc/introduction