RTMP开发记录 测试服务器搭建篇
nginx-rtmp-module 安装
最近在做直播功能,为了方便调试,在本地搭建一个rtmp server吧~
我的配置环境是Ubuntu12.04 64
安装编译环境所需库
sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
下载源码
wget http://nginx.org/download/nginx-1.4.2.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
解压
tar -zxvf nginx-1.4.2.tar.gz
unzip master.zip
cd nginx-1.4.2
编译安装
./configure --add-module=../nginx-rtmp-module-master
$ make
$ sudo make install
那么现在可以试着启动Nginx
sudo /usr/local/nginx/sbin/nginx
然后在浏览器输入http://localhost 应该就能够看到nginx的欢迎首页了,这意味着nginx在我们的机器上运行正常,可以进行下一步配置了:]
Nginx rtmp 配置
打开nginx.conf文件,开始配置rtmp吧:
http {
……
}
在http节点后面加上rtmp配置:
rtmp {
server {
listen 1935;
application live1 {
live on;
record off;
}
}
}
你可以在这里找到完整的配置文件
保存退出后,告诉nginx重新读取配置:
sudo /usr/local/nginx/sbin/nginx -s reload
这里多提一句,如果想要重启nginx:
sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx
这时我们可以测试推送流了,这里由于我们还没有写推送代码,就先借助软件完成吧。
测试推送流
如果你有Windows环境,且是Vista以上系统,有独立显卡,使用Open Broadcaster Software
如果你有Mac环境,使用CocoaSplit
推送流简单来说就是上传,也被称为推送、发布。想要推送流,总要有一个目标地址吧。看看之前我们建立的RTMP服务器配置,里面规定了使用1935作为监听端口,配置了一个应用live1,通过这些信息,我们就能拼出可以使用的上传地址了,例如这样:
rtmp://localhost:1935/live1
live1是应用名,对应我们在nginx中配置的应用。room1是一个应用的实例(或者叫结点,我是这么理解的),这个不需要在服务器做特别的配置,我们只需要在配置好的应用中选择一个实例名字(例如room1)就能使用了。
使用之前提到的软件,简单配置下上传地址就能够发布了。
测试接收流
发送上去了,那么我们如何接收呢?
使用JWPlayer在网页播放
这里又要使用外部工具了:jwplayer,一个flash的播放器,利用它可以在网页播放rtmp流。
jwplayer目前能够提供试用,但是使用需要先注册以获取key。这里有一个我已经注册好并下载到本地的播放器文件,你可以直接使用它们。
找到/usr/local/nginx/html/目录,在下面新建文件player.html
charset="utf-8"> JW Player Example
id="'playerWRYqPNErNtRf'>test然后将jwplayer文件夹放在/usr/local/nginx/html/目录下,最后应该是这样:
/usr/local/nginx/html/player.html
/usr/local/nginx/html/jwplayer/jwplayer.js
/usr/local/nginx/html/jwplayer/jwplayer.flash.swf
...
然后重启nginx,在浏览器输入http://localhost/player.html,点击播放按钮,这时如果你正在使用软件进行推送,就应该可以看到视频了:]
使用VLC软件播放
这是更简单的一种方式,找一个支持rtmp的桌面软件,恩……之前为什么我要折腾jwplayer呢……
下载后打开VLC,在菜单选择file->open network->在弹出的新窗口中选择Network标签页,填入URL:rtmp://localhost:1935/live1->点击open,等待缓冲完成后,就自动开始播放了=。=
RTMP开发记录 测试服务器搭建篇的更多相关文章
- Python全栈开发记录_第一篇(循环练习及杂碎的知识点)
Python全栈开发记录只为记录全栈开发学习过程中一些难和重要的知识点,还有问题及课后题目,以供自己和他人共同查看.(该篇代码行数大约:300行) 知识点1:优先级:not>and 短路原则:a ...
- Python全栈开发记录_第二篇(文件操作及三级菜单栏增删改查)
python3文件读写操作(本篇代码大约100行) f = open(xxx.txt, "r", encoding="utf-8") 不写“r”(只读)默认是只 ...
- Python全栈开发记录_第九篇(面向对象(类)的学习)
有点时间没更新博客了,今天就开始学习类了,今天主要是面向对象(类),我们知道面向对象的三大特性,那就是封装,继承和多态.内容参考该博客https://www.cnblogs.com/wupeiqi/p ...
- SSM框架开发web项目系列(一) 环境搭建篇
前言 开发环境:Eclipse Mars + Maven + JDK 1.7 + Tomcat 7 + MySQL 主要框架:Spring + Spring MVC + Mybatis 目的:快速上手 ...
- .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块
.Net Core ORM选择之路,哪个才适合你 因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...
- 【转】Eclipse和PyDev搭建完美Python开发环境(Ubuntu篇)
原文网址:http://www.cnblogs.com/Realh/archive/2010/10/10/1847251.html 前两天在Windows下成功地搭好了一个Python开发环境,这次转 ...
- Java开发环境的搭建01——Eclipse篇(Windows)
搭建环境是换项目组和新入职的开发入项都必须面临的一件事情,搭搭环境,一天就过去了...本着不浪费生命不做重复的无用功,在这里写写环境搭建的基本功,这篇是介绍Java环境搭建,常见的开发IDE无非就两种 ...
- [转]GeoServer地图开发解决方案(一):环境搭建篇
GeoServer 是 OpenGIS Web 服务器规范的 J2EE 实现的社区开源项目,利用 GeoServer 可以方便的发布地图数据,允许用户对特征数据进行更新.删除.插入操作,通过 GeoS ...
- 一步一步构建手机WebApp开发——环境搭建篇
从2007年,乔布斯带来了第一代Iphone手机,整个移动互联网发生天翻地覆的变化,也同时证明了乔布斯的一句名言:“再一次改变世界”. 在当今的移动互联网,手机App居多,很多App对移动设备的要求也 ...
随机推荐
- eclipse没有(添加)"Dynamic Web Project"选项的方法【转载】
第一种方法: 你安装的是专门开发java项目的,而Dynamic Web Project 属于J2EE技术,所以你要专门下载一个集成了J2EE插件的Eclipse,(eclipse-jee-heli ...
- 编辑距离算法详解:Levenshtein Distance算法
算法基本原理:假设我们可以使用d[ i , j ]个步骤(可以使用一个二维数组保存这个值),表示将串s[ 1…i ] 转换为 串t [ 1…j ]所需要的最少步骤个数,那么,在最基本的情况下,即在i等 ...
- VNC轻松连接远程Linux桌面
VNC连接Linux桌面,要想连接Linux远程桌面,按照下面的步骤,非常简单.快速,Linux配置VNC(以RedHat.CentOS.Fedora系列为例). 工具/原料 Linux平台安装VNC ...
- laravel 报错 mcrypt_decrypt(): Key of size 11 not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported
修改app/config/app.php文件 将key设置成长度为16,24,32的字符串
- C#排列组合类
//----------------------------------------------------------------------------- // // 算法:排列组合类 // // ...
- javascript之定义函数时 this 和prototype区别
注:原文 http://www.2cto.com/kf/201406/307790.html 这里作为学习,写在这里 在面向对象的方式编写js脚本时,定义实例的方法主要有两种:this.XXX = f ...
- 数的计数(number)
数的计数(number) 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数n),先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理: (1)不作任何处理: (2)在它的 ...
- 1084:XX开公司<回溯>
Description 2020年,xx开了一家拥有N个员工的大公司.每天,xx都要分配N项工作给他的员工,但是,由于能力的不同,每个人对处理相同工作所需要的时间有快有慢.众所周知,xx是一个非常重视 ...
- Android--->activity高级运用,保存前一个界面为完成的数据savedInstanceState。
main.xml布局代码分析 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml ...
- hrbustoj 2283 heap解题报告
这是我们校赛的一道题,给一个字符串,判断这是字符串描绘的是不是一个堆,并不难,只是一个简单的模拟,但是也稍微有点麻烦,最起码我的方法代码量比较大,主要用栈做一个父亲与儿子的位置匹配,匹配的方法应该有很 ...