搭建HTTP Live Streaming直播系统
最近,需要将苹果的HTTP Live Streaming系统搭建起来。完全没有头绪,故第一步就是学习。
一、学习资料
官网资料
具体的搭建方案
使用segmenter将现成的视频文件分割,并生成列表文件。
1. http://blog.csdn.net/zhoujunming/article/details/6694730
二、使用Helix Universal Server和Helix Producer搭建直播系统
1. http://scrolls.bokecc.com/?p=207
““”
苹果没有官方的HLS直播服务器软件和客户端软件。其它第三方公司的产品有:
· TVersity· Helix Universal Server· Wowza Media Server· VLC Media Player version 1.2我采用Helix Universal Server和Helix Producer(客户端软件)进行了直播测试。若要做针对iOS平台的直播,目前来看,只能采用此种方式。
”“”
因此我也选择使用Helix Universal Server和Helix Producer来搭建直播系统。
2. Helix Universal Server
(1) 下载与安装
http://www.realnetworks.com/helix/download-helix-products.aspx
在官方页面下载Helix Universal Server与Helix Producer。
Windows系统下,软件的安装过程会有详细而明白的提示,十分方便,
Linux操作系统中,
将下载的tar.gz文件解压得到bin文件。执行bin文件。
1. 输入证书的路径,如果证书有效,就可以不断地按【enter】键将其读完。
2. 选择accept刚才阅读过的内容。
3. 然后程序会让你填写安装路径,默认为bin文件所在的文件夹。第一次安装时,
由于enter点得太快,跳过了这一步。于是不得不再安装一次!!
4. 输入用户名和密码。
剩下就没有太重要的内容了,凭着感觉安装即可。
安装结束后,进入安装目录,
输入命令:sudo ./Bin/rmserver rmserver.cfg就可以将服务器运行起来。
打开配置文件rmserver.cfg,找到管理端口,在我这里是<Var AdminPort="25567"/>
输入链接:http://localhost:25567/admin/index.html 就可以进入系统的管理页面。
(2) 官方文档
http://www.realnetworks.com/helix/download-helix-products.aspx
从上述链接对应的文章中,我们可以了解到如何搭建基于Helix Universal Server的系统,
其中,文章的第七章详细介绍了如何将
http://docs.real.com/docs/producer14/HelixProducer14.0.0_GettingStarted.pdf
上述链接对应的文章介绍了Helix Producer的使用方法。
3. 利用Helix Universal Server和Helix Producer在一台机器上搭建直播系统(winxp操作系统)。
(1) 安装 Helix Universal Server和Helix Producer,安装时均使用默认设置,另外 还要设置用户名和密码。
(2) 运行Server
- 打开服务器自带的管理页面(Server Administrator)。
- 选择Content Management -> Media Segmentation, 将Enable Segmentation的状态改为yes
(3) 运行Helix Producer。
- 选中input标签,设置输入。选中USB/Capture Device,再选择相应的信号源。
- 选中output标签,设置输出。点击面板上的加号(Add output),然后进行对两类参数进行设置。
encoding settings:设定相应的格式以及视频流的平均码率,帧率等参数
output servers:设定编码后的数据发到哪个服务器上。主要有如下几个参数:
Server Type(可能是producer向服务器传送数据的方式):Helix Push.
Stream Name(数据流的名称,在客户端,可以通过这个名称向服务器请求相应的数据流):test.mp4。
Server address(服务器地址,由于server在本地,我将这个值设定为127.0.0.1)。
HTTP Server Port(服务器设定的HTTP端口,默认为80):80.
Username,Password(Helix服务器在安装之初设置的用户名和密码)。
- 点击“Start Job”, 如果start成功,说明producer已经连接到服务器并且开始传输数据。
4. 观察直播系统中的文件。
(1) 通过链接http://127.0.0.1/m3ugen/broadcast/test.mp4可以获得.m3u8文件(类似于index文件)。
(2) 进入服务器管理页面,选择Content Management -> Content Browsing, 点击Browse Content链接,就可以看到服务器上
的挂载点,以及挂载点下的资源。选择iPhone挂载点,进入broadcast,,进入test.mp4就可以看到ts格式的片段文件。
5. 播放。
(1) 在播放器(例如vlc)中输入地址 rtsp://127.0.0.1:554/broadcast/test.mp4, 可以看到直播的视频。
(2) 播放HTTP Streaming,使用苹果客户端(iPhone)
用safari运行脚本:
<html>
<head>
<meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/></head> <body style="background-color:#FFFFFF; ">
<body>
<center> <video src="SERVER_ADD:SERVER_PORT/m3ugen/broadcast/test.mp4" controls autoplay ></video> </center>
</body>
</html>
三、使用免费的产品搭建直播系统
上述方案的不足就是Helix的产品只有试用版。想用正版就得花钱。
1. 学习资料
使用VLC+mediastreamsegmenter+apache搭建HTTP Live Streaming系统:
http://www.unmht.org/memo/en_ipod_stream.html
http://jokru.org/apple-http-live-streaming-to-the-ipadiphone-w
mediastreamsegmenter的使用方法:http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/mediastreamsegmenter.1.html
对于搭建HTTP Live Streaming系统,官方的说明资料:http://developer.apple.com/library/ios/#technotes/tn2224/_index.html
2.工具的选择
(1)视频信号的采集与编码。
mediastreamsegmenter能够接收的数据:视奥频-》H264;音频-》AAC, 封装于ts流中,
通过UDP传输(似乎是这些要求,具体细节我其实也不清楚)。
下面开始寻找能够满足这个要求的工具。
1)quicktime broadcaster
broadcaster的下载地址:http://developer.apple.com/library/ios/#documentation/networkinginternet/conceptual/streamingmediaguide/Introduction/Introduction.html
安装这个软件后,用它向mediastreamsegmenter喂数据,segmenter报错。因此,我认为(可能不对),
这个工具不能满足要求。
2) VLC
经过试验,使用VLC可以成功地向mediastreamsegmenter喂数据。因此我选择VLC作为视频、音频流的处理工具。
(2)视频流的分片工具
使用苹果的mediastreasegmenter
( 3 ) 服务器
apache
3. 具体架设方案。
(1) 视频、音频信号的采集与编码,使用rtsp协议将视频播放出去。
一台PC(ip地址为192.168.1.101),装备有摄像头,麦克风,安装有VLC.
1)打开vlc,,选择 媒体->打开捕获设备->捕获设备。点击播放。如果vlc能够成功将摄像头和麦克风捕获的信号显示出来,
就可以进行下一步。
2)在VLC中选择 媒体->串流->捕获设备,点击串流。接下来会弹出一个流输出设置窗口。
在“目标”中,选择RTSP进行添加,接着数据端口号(默认5544)和路径(我设置为 /test)。
在转码选项中,在“激活转码前打钩”,档案中,保持默认选项(Video-H264+AAC(MP4))。
点击“串流”,这时,该PC机的5544端口就开始提供rtsp直播服务了。
3) 验证rtsp服务是否可用。
打开一个新的VLC,选择 媒体->打开网络串流。输入rtsp://127.0.0.1:5544/test, 如果可以成功地看到摄像头捕获
的影像,就说明rtsp服务是可用的。
(2)视频流的转码
一台mac(我测试用的的视频服务器都部署在这里,IP:192.168.1.109),安装有vlc.
由于mediastreamsegmenter不能直接读入rtsp服务器传来的数据流,所以我们需要对数据进行一定的变换。
1)找到应用程序vlc的地址(一般默认在/Applications/VLC.app/Contents/MacOS下),进入文件夹。
2)输入命令:
./VLC --intf=dummy rtsp://192.168.1.101:5544/test '--sout=#transcode{fps=25,vcodec=h264,venc=x264{aud,profile=baseline,level=30, keyint=30,bframes=0,ref=1,nocabac},acodec=mp3,ab=56,audio-sync,deinterlace}:duplicate{dst=udp{mux=ts,dst=127.0.0.1:8000,access=udp}}'
下面大致介绍一下这条命令:
- --intf=dummy 表示不显示VLC的窗口
- rtsp://192.168.1.101:5544/test 是vlc输入流的来源,也就是我们之前搭建的rtsp服务器。
- --sout, 通过这个选项 对输出进行具体的设置。
- ranscode{fps=25,vcodec=h264,venc=x264{aud,profile=baseline,level=30, keyint=30,bframes=0,ref=1,nocabac},acodec=mp3,ab=56,audio-sync,deinterlace} 这一行命令对于视频和音频的转码格式进行设置(视频和264,音频aac), 但一些参数还不是很明白。
- duplicate{dst=udp{mux=ts,dst=127.0.0.1:8000,access=udp}},将视频、音频流封装为ts格式,使用udp传输,传向本地服务器的8000端口。
(3) 获取ts流并进行分片
1)medianstreamsegmenter
这个小程序一般默认安装在mac的/usr/bin下。
2)使用命令
/usr/bin/mediastreamsegmenter -s 3 -t 5 -D -f /usr/frank/stream 127.0.0.1:8000
判断是否成功分片:如果终端显示 : Finalized 存储路径 file Sequencex.ts,则说明分片成功了。
说明:
-s 3 设定index文件中记录几个分片。
-t 5 设定多长时间(秒)产生一个分片,默认为10秒。
-D 删除过期的分片文件
-f /usr/frank/stream设置存储分片文件和index文件的文件夹
127.0.0.1:8000 设置获取ts流的地址
(4)使用apache提供服务.
第一次在mac下使用apache,难免会感到一丝生疏。学习资料:http://hi.baidu.com/hsbd2005/blog/item/7393a84f0017b5c7d1c86ad4.html
mac自带apache.
1) 启动
使用命令:sudo apachectl start, 然后在浏览器中数据localhost进行查看,如果看到It works,说明apache可以正常工作。
2) 配置文件
配置文件默认路径为 /etc/apache2/httpd.conf(对于文本的编辑,可以用 (vi 文件路径),也可以用(sudo open -a TextEdit.app 文件路径)).
可以看到 DocumentRoot "/Library/WebServer/Documents",也就是说,这是存放资源的默认路径。
3) 进入 /Library/WebServer/Documents, 建立文件夹httpstream,
将mediastreamsegmenter的输出指向这里:
/usr/bin/mediastreamsegmenter -s 3 -D -f /Library/WebServer/Documents/httpstream 127.0.0.1:8000
在浏览器中输入localhost/httpstream/prog_index.m3u8,如果能够看到分片文件的列表,就说明成功了一半。
4) 写脚本文件,在Library/WebServer/Documents/下创建一个index.html文件,具体内容如下:
<html>
<head>
<meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
</head> <body style="background-color:#FFFFFF; ">
<body>
<center> <video src="192.168.1.109/httpstream/prog_index.m3u8" controls autoplay ></video> </center>
</body>
</html>
(5) 直播效果
在safari中输入链接http://192.168.1.109/index.html,观看直播。
画质很差,可能是一些参数设得不够好。
搭建HTTP Live Streaming直播系统的更多相关文章
- windows平台简易直播系统搭建
最近做直播系统的朋友很多,正好前端时间也在做这一块,写片文章分享下开发心得,以为后用. 直播系统我将它分为前堆推流,后台服务,客户端播放三大部分.前端推流基于ffmpeg,后台服务 使用crtmp服务 ...
- VLC-DSS搭建直播系统中链路断开影响测试
VLC-DSS搭建直播系统中链路断开影响测试 系统环境搭建如图所示.计算机77上运行VLC从摄像机51上取流,推送给一级DSS服务器30:二级DSS服务器78从一级DSS服务器30上取流转发.(其配置 ...
- 基于SRS+OBS搭建直播系统
这段时间与视频,直播相关的技术不可谓不热,今天我们就近距离接触下,尽早搭上这班车! 我们先看一张效果图 左边是OBS 推流端,右边是VLC播放器,稍微有延迟! 本文是基于VMware(12.5.7)+ ...
- 使用ffmpeg搭建HLS直播系统
[时间:2018-04] [状态:Open] [关键词:流媒体,stream,HLS, ffmpeg,live,直播,点播, nginx, ssegment] 0 引言 本文作为HLS综述的后续文章. ...
- 在Ubuntu下使用nginx-rtmp-module搭建直播系统
直播系统最简单地包括推流和拉流,在这里先使用nginx-rtmp-module作为流媒体服务器. 流媒体服务器搭建 1. nginx-rtmp-module下载和安装 源码地址:https://git ...
- H264音视频直播系统 服务器端+客户端源码 可用于直播系统搭建
RTP协议实现直播系统搭建,采用H.264和AAC编码,码率极低,同时有较高的视频清晰度和音频音质,可用于视频聊天.视频会议.摄像头监控等多种应用场景. 直播系统搭建发布端,选择视频和音频设备,指定服 ...
- HTTP Live Streaming直播(iOS直播)技术分析与实现
本文转载自:http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html 不经意间发现,大半年没写博客了,自觉汗颜.实则2012后半 ...
- HTTP Live Streaming直播(iOS直播)技术分析与实现
前些日子,也是项目需要,花了一些时间研究了HTTP Live Streaming(HLS)技术,并实现了一个HLS编码器HLSLiveEncoder,当然,C++写的.其功能是采集摄像头与麦克风,实时 ...
- HTTP Live Streaming 直播(iOS直播) 初识
HTTP Live Streaming(HLS)技术,并实现了一个HLS编码器HLSLiveEncoder,当然,C++写的.其功能是采集摄像头与麦克风,实时进行H.264视频编码和AAC音频编码,并 ...
随机推荐
- iOS网络开发之AFNetworking
概述 AFNetworking是一个非常受欢迎的轻量级的iOS.Mac OS X网络通信类库.它建立在NSURLConnection.NSOperation以及其技术的基础上,有着精心设计的模块结构和 ...
- C# 微信海报
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来.我们都知道计算机技术发展日新月异,速度惊人的快,你我稍不留神,就会被慢慢淘汰!因此:每日不间断的学习是避免被 ...
- snapshot standby database
快照备库接收和归档主库发送来的redo,但是不会应用:切换成physical standby之后会自动开启redo apply.快照standby不可以参加主备切换:在最大保护性模式下,如果只有一个备 ...
- Oracle Hang Manager
名词术语1.Cross Boundary Hang 交叉边界hang.在12.1.0.1中,hang manager可以检测database和asm之间的hang.2.Deadlock or Clos ...
- 自动档车的P档和N档的区别
P档时,驻车齿轮在变速箱内被部分锁死,所以此时平地上不踩刹车,车辆有一定的驻车效果.N档就是空档,发动机与传动轴在变速器位置彻底分离,没有连接.因此P档适合停车和驻车,就是到地方了,要熄火时挂P档,拉 ...
- Swift游戏实战-跑酷熊猫 06 创建平台类以及平台工厂类
这节内容我们一起学习下随机长度的踩踏平台的原理是怎么样的. 要点: 平台类 我们的平台类继承于SKNode,这样就能被添加进其它节点进而显示在场景中. 它有一个方法来创建平台,这个方法接收一个包含SK ...
- for 穷举、迭代 while循环
1.穷举: 把所有可能的情况都走一遍,使用if条件筛选出来满足条件的情况. 2.百鸡百钱:公鸡2文钱一只,母鸡1文钱一只,小鸡半文钱一只,总共只有100文钱,如何在凑够100只鸡的情况下刚好花完100 ...
- 01分数规划zoj2676(最优比例,最小割集+二分)
ZOJ Problem Set - 2676 Network Wars Time Limit: 5 Seconds Memory Limit: 32768 KB S ...
- CSS禅意花园(设计一)
设计 1.排版样式. 正文部分文字比例比菜单不分班的大,可区分着两个区域(说明正文比菜单重要).排版也是一种交流方式,运用文字的大小.间距.颜色调整样式,给浏览者丰富的信息. 2.图标 3.分割线 适 ...
- ACM之Java速成(1)
这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 1. 输入: 格式为:Scanner cin = new Sc ...