nginx rtmp模块生成hls文件

rtmp配置

rtmp
{
	server
	{
		listen 1935;
	
		application app1
		{
			live on;
			#record all;
			#record_path /tmp/rec;
		
			hls on; #开启hls转换
			hls_path /tmp/hls; #hls保存目录
			hls_fragment 10s; #10秒一个ts文件
			hls_playlist_length 10m; #文件索引m3u8记录时长,可以是s秒,m分。

			access_log logs/rtmp-access.log combined;
		}
	}
}

在listen监听在非1935端口时,通过obs studio往nginx中推流(rtmp://192.168.1.142/app1),指定了”串流秘钥”后会提示错误,不指定的话,生成的ts文件没有包含串流秘钥的字符串做为文件名的前缀。
后来换回默认的1935端口后才可以。

关于hls访问m3u8(HTTP Live Streaming)变成下载的问题整理

hls是基于http协议的流媒体,在移动端中可以直接播放,测试包括QQ,安卓下的chrome、安卓下的搜狗浏览器都可以直接播放m3u8视频。


但是接到反馈,另一台机器上的m3u8在移动端访问变成下载,而不是直接播放。

通过查看返回的响应头中content-type 为 application/octet-stream


这是mime中默认的,在找不到相对应的content-type时,nginx会返回默认的content-type类型。
正常来说需要返回application/vnd.apple.mpegurl才是正确的。这样才能支持移动端直接播放。

这里加了个location,再添加个文件类型

location /hls
{
	add_header 'Access-Control-Allow-Origin' '*';
	add_header 'Access-Control-Allow-Credentials' 'true';
	add_header 'Access-Control-Allow-Methods' 'GET';
	add_header 'Cache-Control' 'no-cache';
	
	types
	{
		application/vnd.apple.mpegurl m3u8;
		video/mp2t ts;
	}
}

mime介绍:
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
服务器(nginx)会根据客户端请求的资源文件扩展名,然后去对照mime.types文件找对应的content-type,在响应头中返回给客户端。
自己添加一条mime测试一下。

root@rootop:/home/software/openresty/nginx/conf# vi mime.types
types {
	· 略过已有配置
	application/user_define_type		     rootop;
}

在网站根目录下创建一个1.rootop文件,浏览器访问,查看响应头。

FMS配置文件说明 flash media server

FMS(flash media server)配置文件说明 ,转自网络。

fms.ini是把各个层级xml配置文件中的关键部分提取出来放到一起,在实际使用时,这些配置是替换到对应的配置文件中的参数位置。

###############################################################
# 该部分包含在 Server.xml 中的配置参数#
###############################################################

# 服务器admin管理用户名
# For example:
# SERVER.ADMIN_USERNAME = foo
#
SERVER.ADMIN_USERNAME = admin

# admin管理用户的密码
# For example:
# SERVER.ADMIN_PASSWORD = bar
#
SERVER.ADMIN_PASSWORD = admin

# Flash Media Admin Server 监听的IP地址和端口
# For example:
# SERVER.ADMINSERVER_HOSTPORT = :1111
#
SERVER.ADMINSERVER_HOSTPORT = :1111

# 运行进程的用户ID(Linux Only)
# For example:
# SERVER.PROCESS_UID = 500
#
SERVER.PROCESS_UID =

# 进程运行的组ID (Linux Only)
# For example:
# SERVER.PROCESS_GID = 500
#
SERVER.PROCESS_GID =

# Flash Media Server的序列号
# For example:
# SERVER.LICENSEINFO = FMD200-XXXXX-XXXXX-XXXXX
#
SERVER.LICENSEINFO = 1373-5465-5574-9110-6240-7230

# LIVE_DIR 表示示例中直播(live)应用目录的完全路径,
# 用来存储所有服务器记录的所有直播流
# For example:
# LIVE_DIR = \applications\live
#
LIVE_DIR = D:\Program Files\Adobe\Flash Media Server 3.5\applications\live

# VOD_COMMON_DIR 表示示例中点播(vod)应用目录的全路径,
# 用于存储流式点播视频和按进度下载的.flv/.mp3文件
# 文件存储在该目录可以按流式也可以按进度下载
# 注意: 如果你使用默认安装的apache作为web服务器,
# 如果你修改 VOD_COMMON_DIR, 请同时修改httpd.conf中的 document root
#
# For example:
# VOD_COMMON_DIR = \webroot\vod
#
VOD_COMMON_DIR = D:\Program Files\Adobe\Flash Media Server 3.5\webroot\vod
MY_COMMON_VOD_DIR=D:\Program Files\Adobe\Flash Media Server 3.5\webroot\myVod

# VOD_DIR 表示点播应用的目录全路径,仅存储流式点播视频,
# 存储在该目录的.flv/.mp3是不能够按进度下载的
#
# For example:
# VOD_DIR = \applications\vod\media
#
VOD_DIR = D:\Program Files\Adobe\Flash Media Server 3.5\applications\vod\media
MY_VOD_DIR = D:\Program Files\Adobe\Flash Media Server 3.5\applications\myVideo\media

# FLV缓存的上限,MB为单位,默认500MB
# The default is 500MB.
#
SERVER.FLVCACHE_MAXSIZE=500

# 是否随FMS一起启动和停止HTTP服务
#
#
SERVER.HTTPD_ENABLED = true

################################################################
# 该部分包含在 Adaptor.xml 中的配置参数#
################################################################

# FMS监听的IP地址和端口
# For example:
# ADAPTOR.HOSTPORT = :1935,80
#
ADAPTOR.HOSTPORT = :1935,8080

# FMS代理未知HTTP请求转发到的IP地址和端口,留空表示禁止代理
# unknown HTTP requests to. Leave empty to disable proxying.
# 如果没有地址,表示为本机端口.
# For example:
# HTTPPROXY.HOST = webfarm.example.com:80
#
HTTPPROXY.HOST = :8134

##############################################################
# 该部分包含在 Vhost.xml 中的配置参数#
##############################################################

# 虚拟机的应用目录
# For example:
# VHOST.APPSDIR = C:\myapps
#
VHOST.APPSDIR = D:\Program Files\Adobe\Flash Media Server 3.5\applications

####################################################################
# 该部分包含在Application.xml 中的配置参数#
####################################################################

# 脚本加载路径,以分号分隔的列表
# For example:
# APP.JS_SCRIPTLIBPATH = C:\scripts;C:\Program Files\Foo\scripts
#
APP.JS_SCRIPTLIBPATH = D:\Program Files\Adobe\Flash Media Server 3.5\scriptlib

###############################################################
# 该部分包括在 Logger.xml 中的配置参数#
###############################################################

LOGGER.LOGDIR =

####################################################################
# 该部分包括在 Users.xml 中的配置参数#
####################################################################

# 开启或者禁止使用HTTP请求来执行管理命令
# true为开启,否则为禁止。实际针对服务器
# 管理员或者虚拟机管理用户的命令配置在Users.xml中设置
#

USERS.HTTPCOMMAND_ALLOW = true

linux下AMS5.0安装及下载地址

这里下载的版本为AMS5.07
下载地址:
http://download.macromedia.com/pub/adobemediaserver/5_0_7/AdobeMediaServer5_x64.tar.gz

根据手册支持rhel和centos 6.3_x64位,我这里系统版本为centos6.6_x64

解压安装:
序列号自行百度。
提示信息略过。

———– Install Action Summary ———–

Installation directory = /opt/adobe/ams

Adobe Media Server Port = 1935
Adobe Media Admin Server Port = 1111
Interface (IP address) AMS will listen on = auto-detect

Apache Install = Yes

Administrative username = admin
Administrative password = (suppressed)

service owner = ams

service user = ams
service group = ams

Run as daemon = Yes
Start Adobe Media Server = Yes

Proceed with the installation? (y/n/q): y

管理服务:
[root@Master ~]# service ams start|stop|restart #跟fms4.5一样可以管理主服务、fms管理、apache服务状态

[root@Master ~]# /opt/adobe/ams/amsmgr server ams start #启动主服务、apache服务(1935\80\8134)
[root@Master ~]# /opt/adobe/ams/amsmgr adminserver start #启动mfs管理服务(1111)

默认也是所有ams服务开机启动

fms4.5和ams5.0管理方式一样,只是fms变为ams。

在centos7中也安装成功,只是报平台警告,忽略。测试了一下没发现什么问题。
在centos7中,系统中缺少一个killall命令,ams管理服务脚本中会用到这个命令,单独安装 psmisc 这个包。

ams5.0中apache也是使用的2.2版本。

linux下fms4.5安装及下载地址

官方下载地址:http://download.macromedia.com/pub/flashmediaserver/updates/4_5_7/Linux_Release_x64/FlashMediaServer4.5_x64.tar.gz
这一版本为FMS4.5.7

根据官方文档说支持 centos和rhel 5.5_x64位。在centos6下也安装成功,会有个警告。可以加 ./installFMS -platformWarnOnly 参数忽略。
解压,安装。

[root@Master FMS_4_5_7_r6008]# ./installFMS
ERROR: A required package, libcap, was not found on your Linux x86_64 RedHat.
Please install required package and run Adobe Flash Media Server installer again.

[root@Master FMS_4_5_7_r6008]# yum install -y compat-libcap1 #提示缺少一个包
再次执行安装。会提示输入序列号,百度搜个,然后提示默认安装路径,是否安装apache等等信息,直接一路回车即可。

提示信息略过…

———– Install Action Summary ———–

Installation directory = /opt/adobe/fms  #安装路径

Adobe Flash Media Server Port = 1935  #rtmp默认端口
Adobe Flash Media Admin Server Port = 1111  #fms管理端口
Interface (IP address) FMS will listen on = auto-detect #监听地址

Apache Install = Yes  #安装自带的apache

Administrative username = admin  #fms管理用户
Administrative password = (suppressed)  #fms管理用户密码,这里不显示

service owner = fms

service user = fms  #以fms用户运行
service group = fms #以fms组运行

Run as daemon = Yes #守护进程
Start Adobe Flash Media Server = Yes #开机启动

Proceed with the installation? (y/n/q): y

管理服务:

[root@Master ~]# service fms start|stop|restart
通过这一条命令可以管理fms、fmsAdministration、apache的运行状态。默认已经设置为开机启动

文档中指出更详细的执行方式:
go to the installation directory (default is
/opt/adobe/fms/). Use the command “./fmsmgr server fms start” to start Flash Media
Server and “./fmsmgr adminserver start” to start Flash Media Administration Server.

[root@Master ~]# /opt/adobe/fms/fmsmgr server fms start     #FMS主服务
[root@Master ~]# /opt/adobe/fms/fmsmgr adminserver start #FMS管理服务
没看到有apache的独立管理命令。
ps看到启动参数为:
/opt/adobe/fms/Apache2.2/bin/httpd -f ./conf/httpd.conf -d /opt/adobe/fms/Apache2.2 -k start