搭建 Http Dynamic Streaming 点播/直播服务器
1. HTTP Origin Module的处理数据流:
a) 客户端发送媒体索引请求到Apache。例如:
http://www.example.com/media/ sample.f4m
b) Apache处理请求到HTTP Origin
Module
c) HTTP Origin Module返回 F4M文件到客户端
d) 客户端接收F4M,根据 bootstrap中的信息中的传送时间,组成一个segment#/fragment#对。例如:
http://www.example.com/media/sampleSeg1-Frag1
e) Apache接收请求,并把请求传组HTTP
Origin Module
f) HTTP Origin Module用这个索引文件(F4X)转换请求到分版本文件的偏移字节。例如:
http://www.example.com/media/sampleSeg1.f4f
g) 客户端接收分片,并用F4M文件中的BOOTSTRAP信息,开始进行播放
2. 准备:
a) File Packager:http://www.adobe.com/products/hds-dynamic-streaming.html
b) Apache2
c) HTTP Origin Module
d) OSMF Simple Player For Http Dynamic Streaming 下载地址: http://www.osmf.org/downloads/OSFMPlayer_zeri2.zip
3. 配置:
需求:
a) 要apache2.2版本
b) Windows下要安装VS2005或VS2008资源包。
c) 在linux下需要安装下列包:OpenSSL, Expat, and Netscape Portable Runtime (NSPR).
d) 安装HTTP Origin Module
把下列文件复制到 apache modules文件夹下:
· (Windows) mod_f4fhttp.so, hds.dll (adbe_F4V.dll in earlier versions), libexpat.dll
· (Linux) mod_f4fhttp.so, libhds.so (libF4V.so in earlier versions), libexpat.so
4. 配置 on-demand流,配置点播文件的位置
a) 打开apache配置文件httpd.conf
加载模块:
LoadModule f4fhttp_module modules/mod_f4fhttp.so
b) 配置HTTP origin module的处理对象位置:
<Location /vod>
HttpStreamingEnabled true
HttpStreamingContentPath /var/www/flv
</Location>
Directive |
Description |
<Location> |
请求URI,注意不要包含URL前缀 Do not include an http prefix |
HttpStreamingEnabled |
Indicates whether HTTP streaming is enabled (true) or not (false). |
HttpStreamingContentPath |
内容的物理位置,用一个绝对路径 /var/www/flv |
c) 保存,并重启apache
5. 转换点播文件
File产生者只能对 flv或f4v/mp4文件生成分片。
文件类型 |
描述 |
.f4f |
分段文件。工具输出一个或多个f4f文件。每个文件包含源文件的一个分段(segment)。每个分段包含一个或多个分片(fragment)。一个播放器能用URL地址请求每个分片(fragment). |
.f4m |
媒体描述文件. 包含媒体的编解码、解析、多比特率的可用性。 |
.f4x |
索引文件。包含指定分片在流中的位置。 |
.bootstrap |
它将告诉apache及其中的模块如何去读取./f4f文件,可以理解为引导文件,引导信息来自于.f4m文件,但是也可以额外指定其它信息来源(--external-bootstrap) |
.drmmeta |
用于保存加密的信息,需要使用(--external-bootstrap)来引用进来 |
例如:
cd /var/www/flv
f4fpackager --input-file=sample.f4v --output-path=/sampleoutput
6. 播放设置:
把下载的播放器放到apache web目录下
/var/www/
解压。
打开 OSMFPlayer.html文件。
增加你的点播地址:
var links
= [ "http://mediapm.edgesuite.net/osmf/content/test/manifest-files/dynamic_Streaming.f4m"
, "http://mediapm.edgesuite.net/osmf/content/test/manifest-files/progressive.f4m"
, "http://mediapm.edgesuite.net/osmf/content/test/train_1500.mp3"
, "http://mediapm.edgesuite.net/strobe/content/test/AFaerysTale_sylviaApostol_640_500_short.flv"
, "images/vegetation.jpg"
, "http://192.168.0.10/vod/sample.f4m"
];
7. 播放
用浏览器打开 http://192.168.0.10/ OSMFPlayer.html。在上面列表中点 http://192.168.0.10/vod/sample.f4m 。就可以播放了。注意,可能会提示是否运行脚本,允许即可。
参考:
文件产生工具:
http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS9463dbe8dbe45c4c-c126f3b1260533756d-7ffc.html
Apach配置:
8. 直播:
a) 下载Adobe Flash Media Server,这个是要收费的,免费的只是开发版,并有用户数据限制。http://www.adobe.com/products/hds-dynamic-streaming.html
b) 安装:
----------- Install Action Summary -----------
Installation directory = /opt/adobe/fms
Adobe Flash Media Server Port = 1935,80
Adobe Flash Media Admin Server Port = 1111
Apache Install = Yes
Administrative username = root
Administrative password = (suppressed)
service owner = fms
service user = fms
service group = fms
Run as daemon = Yes
Start Adobe Flash Media Server = Yes
Flash 媒体服务器服务端口 1935是用于接收直播rtmp流的。80端口用于客户端请求的。
它默认情况是启动了自带的Apache服务器。Fms通过80接收http请求,然后通过8314(配置文件在安装目录下conf/fms.ini)传给apache。如果我们不用它自带的apache,就可以不用配置。
例如:在安装目录下conf/fms.ini, 将其中的ADAPTOR.HOSTPORT = :1935,80 一行改为ADAPTOR.HOSTPORT =:1935; 不让FMS监听80端口;同时,将其中 HTTPPROXY.HOST = :8134一行改为: HTTPPROXY.HOST
=
这样便去掉了以上的代理转发过程。
9. 用ffmpeg生成直播流
a) 接收组播直播流,并保存成文件:
./ffmpeg -i udp://@:30000 a.ts
b) 从文件生成直播流:
ffmpeg -i a.flv -f flv rtmp://IP/livepkgr/livestream?adbe-live-event=liveevent
IP是你的fms服务器的IP地址
c) 从组播地址接收组播,并把它转成rtmp协议发给 fms服务器
ffmpeg –i udp://@:port –f flv rtmp://IP/livepkgr/livestream?adbe-live-event=liveevent
10. 再按点播时的地址:
http://IP/hds-live/livepkgr/_definst_/liveevent/livestream.f4m
HTTP Dynamic Streaming介绍
一、什么是HTTP Dynamic Streaming
使用传统的HTTP协议进行在线播放叫做“渐进下载”,所有的视频内容从头到尾必须从服务器传输到客户端,用户只能在传输完的视频长度中选择播放点,而不能自定义播放点及传输点,比如我们在看视频的时候是边下边看,没下载完则看不了,而且也不能绕到视频后面的片段。当视频观看完毕之后,在浏览器的缓存中会存在一个视频文件。
而使用RTMP协议进行传输的数据包叫做“流”(如Flash Media Server),它能够让视频内容分割成多个数据包并源源不断从服务器端传输到客户端,客户端可以在视频内容任意一个点开始请求传输,而不用关心该点之前的内容是否已经传输。这样我们看视频的时候可以在任意一个地方开始观看,点到哪里就从哪里开始下载,观看完毕之后在客户端不会有缓存文件。
两种协议各有各的优缺点,比如http协议在第二次观看视频的时候会直接使用缓存文件进行播放,速度也比较快,而RTMP协议必须保持源源不断送出“流”,同时本地也无缓存。
而HTTP Dynamic Streaming则是对两种协议的优点进行了一个组合,达到了两个协议取长补短的服务平台。其通过对来自RTMP端的“流”进行包装处理,转化成 HTTP“流”提供给客户端解析,用户再也不用下载整个文件,同时又能使用HTTP协议进行快速观看视频。
架构图:
工作模式:
HTTP Dynamic Streaming有两种工作模式,一种是On-demand模式,直接对文件进行“流”处理,把单个文件分离成N个片段,用户跳到相应的片段,则传输该 片段,用户没请求该片段,则不传输(貌似能达到节省带宽的作用);一种是live模式,也就是所谓的直播,这里需要FMS的支持,FMS通过把直播流传递 给HTTP Dynamic Streaming,然后进行包装处理,传递给客户端,此模式可以应用在视频会议,视频聊天室,网络直播等应用中,HTTP Dynamic Streaming的主要作用也在这个模式中体现。
二、原理分析
用过Flash Media Server(简称:FMS)的技术人员都知道FMS的工作原理,而HTTP Dynamic Streaming(简称:HDS)的实际效果则是工作在FMS计算结果上的,从架构图上不难看出,无论是On-demand模式或live模式,多多少 少都会依赖FMS,比如On-demand模式,FLV文件必须通过FILE PACKAGER进行转码得到".f4f",".f4m",".bootstrap"等文件才能够提供给“HTTP ORIGIN MODULE”处理,而一般线上的环境的视频文件何止千千万万!再说效率是否达到要求还很难说。而live模式中LIVE
PACKAGER能够把来自RTMP的“流”直接生成所需要的文件,提供给“HTTP ORIGIN MODULE”处理,但依然也是得有FMS的支持才行。
实际的工作流程是这样的:
On-demand: FLV /F4V(目前只支持两种格式)------>File Packager------->(.f4f/.f4m/.f4x/..bootstrap/.drmmeta)------->Apache-------->HTTP ORIGIN MODULE-------->客户端播放器(需支持HTTP流)
Live: FLV /F4V(目前只支持两种格式)------->FMS(Using RTMP)------->Live Packager------->(.f4f/.f4m/.f4x/..bootstrap/.drmmeta)------->Apache-------->HTTP ORIGIN MODULE-------->客户端播放器(需支持HTTP流)
相关模块:
File Packager:一个命令行工具,它可以按照需求把多媒体文件形成流碎片并把碎片写进\.f4f文件。文件包装机是一种离线工具。同时也支持Flash Access验证访问的需求。
Live Packager:该工具只针对HDS,同时集成在FMS(version 3.8以上)。它可以实时测量RTMP流(live),并将之转化成新的\.f4f文件,满足实时性要求。内置的apache服务器使用HTTP ORIGIN MODULE对生成的文件进行解析,然后提供出HTTP流。
HTTP ORIGIN MODULE:HDS的重要组成部分,其为apache的一个modules,负责对(.f4f/.f4m/.f4x/..bootstrap/.drmmeta)等文件进行解析,然后转换成HTTP流输出。
OSMF Player:一个开源的播放器,建立在Open Source Media Framework(OSMF)的框架上,支持HTTP流,要求Flash player 10.1或以上
转自http://blog.csdn.net/kl222/article/details/7989562
搭建 Http Dynamic Streaming 点播/直播服务器的更多相关文章
- 搭建HTTP Live Streaming直播系统
最近,需要将苹果的HTTP Live Streaming系统搭建起来.完全没有头绪,故第一步就是学习. 一.学习资料 官网资料 1. http://developer.apple.com/resour ...
- Mac上搭建直播服务器Nginx+rtmp
简介 nginx是非常优秀的开源服务器,用它来做hls或者rtmp流媒体服务器是非常不错的选择,本人在网上整理了安装流程,分享给大家并且作备忘. 步骤安装 1.安装Homebrow Homebrew简 ...
- OSX安装nginx和rtmp模块(rtmp直播服务器搭建)
1.安装Homebrew,执行命令 1 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/ma ...
- Ubuntu18.04下配置Nginx+RTMP服务器,实现点播/直播/录制功能
2019.3.22更新 最新的nginx-1.15.9可与openssl1.1.1兼容了 以下原文: 这个东西我眼馋挺久了,最近终于试玩了一下,感觉很好玩,在搭建的过程在也遇到一些坑,这里总结一下 安 ...
- Mac上搭建直播服务器Nginx
Mac上搭建直播服务器Nginx 1.安装Homebrew,执行命令 Homebrew简称brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,可以说Homebrew就 ...
- 基于nginx的rtmp直播服务器(nginx-rtmp-module实现)
首先,在搭建服务之前先了解下目前主流的几个直播协议: 1.RTMP: 实时消息传输协议,Real Time Messaging Protocol,是 Adobe Systems 公司为 Flash 播 ...
- Mac直播服务器Nginx配置对HLS的支持
在上一篇中Mac上搭建直播服务器Nginx+rtmp,我们已经搭建了nginx+rtmp直播服务器.下面需要对Nginx服务器增加对HLS的支持.在Nginx增加对HLS种支持比较简单,只是简单的修改 ...
- 调用Live555接收RTSP直播流,转换为Http Live Streaming(iOS直播)协议
Live555接收RTSP直播流,转换Http Live Streaming(iOS直播)协议 RTSP协议也是广泛使用的直播/点播流媒体协议,之前实现过一个通过live555接收RTSP协议,然后转 ...
- 一个P2P点播直播开源项目:P2PCenter
最近跟着公司的项目走,我也研究了不少东西,尤其是在P2P方面,广泛涉猎各种开源项目,尤其是国外的开源项目,意外的发现了一个国内的项目,做的还不错,推荐一下.---------------------使 ...
随机推荐
- Spring JDBC查询返回对象代码跟踪
在封装方法的时候突然发现通过 ResultSetMetaData的getColumnCount()获取到的列明会多一列(ROWSTAT),而且每次的值都是1,目前没有找到相关信息,在国外网站上看到有类 ...
- How to avoid Over-fitting using Regularization?
http://www.mit.edu/~9.520/scribe-notes/cl7.pdf https://en.wikipedia.org/wiki/Bayesian_interpretation ...
- Django之权限用法
**记住每一个url都是一个权限** 注册 可插拔试的权限,可以先写其他的逻辑,在最后再把权限加上 将rbac组件拷贝到项目上,注册项目 修改表结构 将写好的用户表对rbac的User表进行一对一的关 ...
- HTTP 304 详解
把Last-Modified 和ETags请求的http报头一起使用,这样可利用客户端(例如浏览器)的缓存.因为服务器首先产生 Last-Modified/Etag标记,服务器可在稍后使用它来判断页面 ...
- 短时程突触可塑性(short-term synaptic plasticity)
介绍 神经元的突触可塑性一般被认为是大脑学习与记忆的分子生物学机制,它是指突触传递效率增强或减弱的变化现象.若这种变化只持续数十毫秒到几分,便称之为短时程突触可塑性,其中效率增强与减弱分别叫做短时程增 ...
- 初步jmeter安装与使用
前言,最近公司做了面向全国用户的教育平台,由于测试人员以功能测试为主,于是接口代码压测就被开发揽了,这就开始倒腾jmeter了,其实我想对于java,我更愿意用Python的工具,毕竟我爬虫时用的Py ...
- Python: generator, yield, yield from 详解
1.Generator Expressions 生成器表达式是用小括号表示的简单生成器标记法: generator_expression ::= "(" expression co ...
- python-2 什么是函数
函数是什么? 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 形参变量只有在被调用时才 ...
- print函数详解及python打印99乘法表的不同方法
首先你需要了解print的原型,并且要知道在python2和python3中print函数功能不同,不只是表现在后面带不带()一方面! 在python3中,通过help(print)可以得到print ...
- iOS block 闭包的学习
iOS 闭包 学习 理解: 1 . 闭包外界无法访问内部变量 ,它是一个独立的代码块. 2 . 闭包可以作为 一个方法 ,甚至局部变量 全局 变量 3 . 闭包 是一种引用类型 注 ...