网页测试本地服务器_音视频开发搭建一个直播服务器
现在抖音、快手等直播实在是太火了,因此对音视频的开发非常感兴趣。查阅了相关资料,使用Nginx搭建一个简单的直播跟点播流媒体服务器,能够实时推流到服务器,同时在网页端播放直播的视频。
先上效果
使用OBS软件录制电脑桌面操作推流到自己搭建的流媒体服务器,然后在网页拉流播放。
当然也可以采集摄像头、麦克风或者推送本地视频文件到流媒体服务器。
搭建步骤
Ubuntu18.04安装nginx-flv模块扩展
这里我是用虚拟机安装了Ubuntu18.04先下载nginx1.19.3的源码与nginx-http-flv-module的源码。
wget https://github.com/winshining/nginx-http-flv-module/archive/master.zipwget http://nginx.org/download/nginx-1.19.3.tar.gz && tar -zxvf nginx-1.19.3.tar.gz
解压下载的个源码进行编译,这样一个Nginx搭建的流媒体服务器就好了。
cd nginx-1.19.3 #进入nginx源码目录 ./configure --add-module=../nginx-http-flv-module-master vim objs/Makefile #删除-Werror make make install
进行点播与直播配置
上面已经安装好了nginx,编辑/usr/local/nginx/conf/nginx.conf进行相关配置。这里直接贴出完整的配置。其中rtmp为开启rtmp服务功能,并且为了能够在网页端播放开启了hls。推流的rmtp流会转换成hls协议的ts切片,保存在服务器上,nginx配置了location让网页能够访问切好的hls切片。
这里解释下rtmp是adboe的私有协议,必须使用flash播放。hls是苹果开发的视频传输协议使用http进行传输。ios跟android支撑的都很好,一般进行跨平台直播使用hls协议比较常见。
#user nobody;worker_processes 1;events { worker_connections 1024;}
rtmp { #RTMP服务 server { listen 1935; #//服务端口 chunk_size 4096; #//数据传输块的大小
application vod { play /opt/video/vod; #//视频文件存放位置。 } application live{ live on; #直播 hls on; #把直播服务器改造成实时回发服务器,视频切片成ts wait_key on; #对视频切片进行保护 hls_path /opt/video/rtmp/hls; #ts切片存放位置 hls_fragment 10s; #切片大小 hls_playlist_length 60s; #回看的时间 hls_continuous on; #连续模式 hls_cleanup on; #对多余切片进行删除 hls_nested on; #嵌套模式 } }}http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location /stat { #第二处添加的location字段。 rtmp_stat all; rtmp_stat_stylesheet stat.xsl; }
location /stat.xsl { #第二处添加的location字段。 root /usr/local/nginx-http-flv-module/; } location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } alias /opt/video/rtmp/hls; add_header Cache-Control no-cache; add_header Access-Control-Allow-Origin *; } location / { root html; index index.html index.htm; }}
进行测试
使用obs推流推送到rtmp://192.168.227.128/live串流密钥随便填写即可。
h5网页端采用video.js进行播放直播流视频,这里的播放的地址是切好片的m3u8文件地址,m3u8存放了每一个小切片的地址。
<body> <video id=example-video width=600 height=300 class="video-js vjs-default-skin" controls> <sourcesrc="http://192.168.227.128/hls/test/index.m3u8"type="application/x-mpegURL"> video> <link href="//vjs.zencdn.net/7.8.2/video-js.min.css" rel="stylesheet"> <script src="//vjs.zencdn.net/7.8.2/video.min.js">script> <script src="videojs-contrib-hls.min.js">script> <script src="https://unpkg.com/browse/@videojs/http-streaming@2.2.3/dist/videojs-http-streaming.min.js">script> <script>var player = videojs('example-video'); player.play();script> body>
上面的nginx配置还配置了本地视频文件点播配置,把视频文件放在/opt/video/vod位置,使用vlc填写rtmp://192.168.227.128/vod/qlgame.mp4进行播放即可。
以上搭建只是测试学习使用,实际音视频开发涉及采集、编码、推流、传输、拉流、解码等等过程,每一个过程都设计许多知识。后面音视频开发学习笔记,等我攒了一些笔记发出来互相学习。
网页测试本地服务器_音视频开发搭建一个直播服务器相关推荐
- 一个域名使用多个服务器_如何使用linuxgsm搭建一个求生之路服务器
搭建linuxgsm托管的求生之路2服务器 我使用的是Linux系统来跑求生之路2服务器端,因此使用了Linux上一个专门用于搭建游戏服务端的软件:Linux Game Server Managers ...
- 安卓 camera 调用流程_音视频开发之旅(四)Camera视频采集
目录 Camera基础知识 视频采集的流程 遇到的问题和常见的坑(重点) 收获 一. Camera基础知识 Camera 有几个重要的基础概念. facing相机的方向,一般后置摄像头和前置摄像头. ...
- datagrid 重载本地数据_音视频系列3:使用ffmpeg + nginx搭建本地转发服务器
本文与csdn博客同步:https://blog.csdn.net/Hanghang_/article/details/104893135,欢迎关注,点赞,评论. 前言 音视频系列: HectoorZ ...
- Android音视频开发;斗鱼直播实现
一.直播的本质 实时推送/拉取音视频数据 二.视频直播流程 视频直播的流程可以分为如下几步: (1)采集 (2)处理 (3)编码和封装 (4)推流到服务器 (5)服务器流分发 (6)播放器流播放 1. ...
- 手把手教你搭建一个直播服务器(Nginx+Rtsp)
本教程感谢慕课网 常用工具: ffmpeg音视频编解码 ffplay音视频播放工具 搭建流媒体服务器 准备流媒体服务器linux 准备并安装Nginx服务 配置RTMP并启动Nginx服务 1.lin ...
- 简单搭建一个直播服务器
一.动手搭建流媒体服务器 1.下载srsv2.0_r8 ,下载地址是:https://codeload.github.com/ossrs/srs/zip/v2.0-r8 建议用迅雷下载,个人感觉比较快 ...
- svn服务器搭建和使用_简单使用nodejs搭建一个静态服务器
前提:系统安装nodejs 搭建步骤 使用nodejs搭建服务器,简单的来说可以分为三步: require相应的模块 创建服务器 配置端口 启动服务器 必要的nodejs模块 以下模块都是以 var ...
- python做游戏服务器_浅谈如何做一个游戏服务器
首先要知道游戏类型是什么,然后知道承载人数是多少,以及开发周期多少.需要根据这些来决定游戏架构和技术选型. 网络和数据协议 网络传输tcp VS udp tcp可靠保序,而udp则不是,但是吞吐量会大 ...
- 从直播答题看背后的移动音视频开发
直播答题经历了火山喷发式的火爆,展晓凯和他的团队也经历了在短短数周内完成产品开发.测试.上线.运营.迭代的过程,他从产品逻辑.技术实现.难点突破等方面给出了自己的方案与经验.本文来自全民快乐研发高级总 ...
最新文章
- oracle 状态unknown,Oracle RAC 一个节点的instance资源状态为unknown
- php适配器模式应用,什么是适配器模式,它有哪些应用场景
- Sleep()和wait()方法的区别
- html语言中div怎么起名,css如何命名?
- linq绑定下拉列表,combobox中增加listitem的方法,增加“请选择”
- 测试软件项目的方法,保证项目测试进度的几个方法
- web 后台返回json格式数据的方式(status 406)
- 第十六期:Vue 3.0 前瞻,体验 Vue Function API
- 输入学生的个数,姓名,成绩,然后按照学生的成绩的降序来打印学生的姓名
- MySQL 8密码策略
- 车辆抵押贷款风险分析
- linux 4433端口,linux – 使用相同的openssl端口443绑定不同端口的apache ssl端口
- Java判断文件是否为图片
- Android 开机第一帧制作、开关机动画制作、壁纸添加
- JavaScript内容回顾第十天
- 第三批更新鸿蒙系统,emui11第三批更新名单-emui11第三批更新名单介绍 - 系统家园...
- Android apk瘦身之使用TinyPng压缩图片
- doraemon的python(大更新) django静态文件的配置(出错多的地方)
- 基于大数据的网站日志分析系统
- ​1000+数字化精英汇聚,3大低代码解决方案发布,奥哲低代码数字化解决方案发布会圆满落幕
热门文章
- 【宽搜】XMU 1039 Treausure
- 8张图带你理解Java整个只是网络(转载)
- Redis简介、与memcached比较、存储方式、应用场景、生产经验教训、安全设置、key的建议、安装和常用数据类型介绍、ServiceStack.Redis使用(1)...
- LeetCode: Jump Game II
- keygen基本流程
- SQL Server统计信息:问题和解决方式
- 解决iOS机型点击输入框不能聚焦的问题
- MYSQL连接一段时间不操作后出现异常的解决方案
- 解决无法安装cnpm,cnpm卡顿问题
- Spring全局异常处理