简介:HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体 网络传输协议。
是苹果公司QuickTime X和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP
的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速
率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包
含元数据的extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。
HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防
火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。
此协议详细内容请参考apple官方网站:https://developer.apple.com/resources/http-streaming/
有两种方式搭建HLSserver,
一种是利用apple SDK,
一种是利用adobe 的fms,4.5版本支持hls,参考,
adobe的fms现在很强大,但是商用需要licence。有兴趣的可以研究下。
一种是利用opensouce.我比较喜欢这一种。
方法:
opensource的方法主要是使用m3u8-segmenter+ffmpeg对ts文件进行分片。
因此思路就是:
1,用编译好的ffmpeg制作所需要的ts文件,
2,安装libavformat-dev版本,
3,编译m3u8-segmenter,
4,部署到nginx
5,高级功能,流切换
6,页面
过程
1,本来想下载ffmpeg源码编译,但是因为要涉及到faac,x264,lame库。有时候ffmpeg版本对这些库的版本又有最低版本要求,在编译
faac时候遇到以下问题
- 安装支持库
- apt-get install automake autoconf m4 libtool
- -bash: ./bootstrap: /bin/sh^M: bad interpreter: No such file or directory
- 转换字符:
- dos2unix bootstrap
- make
- 错误:mpeg4ip.h:126:58: error: new declaration ‘char* strcasestr(const char*, const char*)’
- 解决方法:Remove line 126 containing strcasecmp from mpeg4ip.h as a temporary workaround
- make install时遇到
- usr/local/share/man/man1文件夹无法创建问题。
最后一个问题无法解决,好像是linux(ubuntu)下同一个目录下,如果已经有一个文件了,则不能创建同名文件夹,遂放弃编译,
直接从ffmpeg网站:http://ffmpeg.org/download.html ,的linux下载页面下载编译好ffmpeg静态文件。这个静态文件的主要目的是
为了把各种文件转换成apple所规定的文件。所以需要AAC,mp3,x264库支持。
或者干脆按照2的方法。apt-get install ffmpeg.这样会得到ffmpeg可行性文件。
2,安装ffmpeg支持库,主要用于编译m3u8-segmenter,这里的ffmpeg支持库,其目的是给segmenter提供libavformat支持。不涉及编解码。
apt-get install libavformat-dev.
- Reading package lists... Done
- Building dependency tree
- Reading state information... Done
- The following extra packages will be installed:
- libavcodec-dev libavcodec53 libavformat53 libavutil-dev libavutil51 libgsm1 libogg0 liborc-0.4-0
- libschroedinger-1.0-0 libspeex1 libtheora0 libva1 libvorbis0a libvorbisenc2 libvpx1
- Suggested packages:
- libfaad-dev libgsm1-dev libogg-dev libschroedinger-dev libspeex-dev libtheora-dev libvorbis-dev libx11-dev
- libxext-dev libraw1394-dev libdc1394-22-dev speex
- The following NEW packages will be installed:
- libavcodec-dev libavcodec53 libavformat-dev libavformat53 libavutil-dev libavutil51 libgsm1 libogg0 liborc-0.4-0
- libschroedinger-1.0-0 libspeex1 libtheora0 libva1 libvorbis0a libvorbisenc2 libvpx1
这样会自动安装ffmepg几个相关库。
3,从https://github.com/johnf/m3u8-segmenter 下载m3u8-segmenter
下载后不要用它的反复编译,直接取m3u8-segmenter.c文件,
- gcc -Wall -g segmenter.c -o segmenter -lavformat
从源码来看,因为只用到了avformat库,所以只链接这一个即可。生成segmenter文件,用help命令,可以看到已经成功。
- HTTP Live Streaming - Segments TS file and creates M3U8 index.
- -i, --input FILE TS file to segment (Use - for stdin)
- -d, --duration SECONDS Duration of each segment (default: 10 seconds)
- -p, --output-prefix PREFIX Prefix for the TS segments, will be appended
- with -1.ts, -2.ts etc
- -m, --m3u8-file FILE M3U8 output filename
- -u, --url-prefix PREFIX Prefix for web address of segments, e.g. http://example.org/video/
- -n, --num-segment NUMBER Number of segments to keep on disk
- -h, --help This help
从上图来看,语法很简单,这里贴一个我用的。
- ./segmenter -i test.ts -n 30 -p sample_test -m stream-test.m3u8 -u http://192.168.1.10:8080/hls/
i表示输入文件,n表示切割30个,p表示切割文件的前缀。m表示生成的m3u8文件名,u表示这些切割后的文件处于web server的哪个目录下,这个一定要和web目录匹配
4,部署到nginx。
nginx的相关部署我在前两个博客中已经详细说明,这里在jwplayer博客的基础上部署hls。
1)目录问题:
在html/jwplayer目录下,建立hls文件夹,将m3u8文件和切割后的全部ts文件拷贝到此目录下,
在VLC PLAYER或者ipad safie浏览器或者在ffplayer(我用的是0.11版本的windows编译版本)
上的访问路径应该是http://192.168.1.10:8080/hls/stream-test.m3u8
2)文件类型问题:编辑 /usr/local/nginx/conf/mime.types 文件,添加如下类型
- application/x-mpegURL m3u8;
- video/MP2T ts;
3)重启nginx
输入上述路径,你应该就看到视频了。
5,高级功能,流切换
上述m3u8文件,只有一个流,不具备流切换功能。在优酷上,如果是ipad客户端,可以看到有标清,高清,超清的按钮,其实那个是对应着不同标准
的(单个)m3u8文件,来实现流切换的,不知道apple是不是这样做的,apple好像是要求“智能”流切换。即不要求用户去选择,而是根据网络状况自适应的。
apple给的sample的流切换是把各个流的m3u8写在一个m3u8文件里实现的。
类似于这样,其实原理是一样的。
- #EXTM3U
- #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=100000
- video1/index1.m3u8
- #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000
- video2/index2.m3u8
6,页面,
如果再继续搭建一个页面,把上述地址嵌在页面里面,这样配合CSS就比较美观了。页面可以在这个基础上,用webpy去做。
页面参考:
苹果开发网:https://developer.apple.com/resources/http-streaming/
博客:http://www.nginxs.com/linux/459.html
ffmpeg开发网:http://ffmpeg.org/download.html
segmenter源码:https://github.com/johnf/m3u8-segmenter
2014.02备注:
文中所描述的切片软件可能有问题,可选择这个
https://code.google.com/p/httpsegmenter/downloads/list
http://blog.csdn.net/cjsafty/article/details/7922849
相关推荐
linux下搭建rtmp及hls全套资料及资源,新手可在linux下快速搭建流服务器,所需源码都已打包,无需另外下载依赖包,简单快捷,搭建完成启动/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
在构建流媒体服务器时,Nginx 和 Nginx-rtmp-module 是一种常见的组合,它们为实时流传输提供了高效且稳定的服务。Nginx 是一个高性能的 Web 服务器和反向代理,而 Nginx-rtmp-module 是一个扩展模块,使 Nginx 具备...
**Nginx是一款广泛应用的高性能Web服务器和反向代理服务器,同时也支持RTMP协议,使得它成为搭建流媒体服务器的理想选择。在Linux环境下,我们可以通过以下步骤使用Nginx 1.6.3版本来搭建RTMP协议的流媒体服务器。**...
总结起来,`Nginx`通过`RTMP`和`HLS`模块提供了一套全面的视频流分发解决方案,尤其在`Win32`平台上,可以轻松构建起一个视频直播服务器。理解这些核心概念和技术细节,将有助于你有效地部署和管理视频流服务。
Windows10 下搭建 nginx 流媒体服务器 Windows10 下搭建 nginx 流媒体服务器是指在 Windows10 操作系统下安装和配置 nginx 流媒体服务器,以便提供流媒体服务。流媒体服务器是指可以将音视频文件实时流式传输到...
inux平台下使用nginx与nginx-rtmp-module搭建RTMP+HLS流媒体服务器的详细操作步骤在文章(http://blog.csdn.net/liuchen1206/article/details/77771703)中有作介绍,现将资源整合成自动编译部署脚本,节约时间。...
搭建ffmpeg+nginx+yasm流媒体服务器低延迟 一、流媒体服务器概念 流媒体服务器是指能够实时地传输和处理视频流的服务器,通常用于直播、监控、在线视频等应用场景中。搭建流媒体服务器需要选择合适的软件和硬件...
在Windows环境下,使用nginx-rtmp搭建流媒体服务器是一项常见的技术实践,这使得用户可以通过网络实时传输音视频流。nginx-rtmp是一个基于Nginx的模块,它扩展了Nginx的功能,使其能够处理RTMP(Real-Time Messaging...
使用nginx实现HLS m3u8点播功能。 包括,nginx安装,mp4、flv切片,测试,跨域问题,nginx集群等等。
在这个场景下,我们将讨论如何在Windows环境下使用Nginx搭建一个RTMP流媒体服务器。 首先,你需要从Nginx官方网站或第三方源获取适用于Windows的Nginx版本。在本例中,我们使用的版本是nginx-1.7.11.3。这个版本...
总结来说,搭建一个支持HLS的流媒体服务器需要安装Nginx、Nginx-RTMP-Module、FFmpeg以及其依赖,配置Nginx以支持RTMP推流和HLS分发,最后使用FFmpeg进行转码。这个过程涉及的每个环节都是流媒体服务的关键组成部分...
在构建实时流媒体服务时,使用Nginx与FFmpeg结合搭建HLS(HTTP Live Streaming)直播转码服务器是一种常见的解决方案。HLS是苹果公司提出的一种适应性流媒体技术,适用于多种网络条件下的多媒体传输。Nginx是一个高...
- 为了监控HLS流的状态,可以使用Nginx的访问日志和错误日志。同时,确保对HLS目录有适当的权限控制,避免未授权访问。 通过以上步骤,你就成功地搭建了一个基本的Nginx HLS服务器。你可以根据实际需求进行扩展,...
本文将详细介绍如何通过Nginx和Nginx-rtmp-module搭建支持RTMP和HLS协议的流媒体服务器,并实现直播推送和播放。 #### 二、准备工作 1. **下载Nginx-rtmp-module** Nginx-rtmp-module可以从其官方GitHub地址下载...
【部分内容】详细介绍了环境搭建的步骤,包括依赖库的安装、Nginx及nginx-http-flv-module的配置和编译,以及ffmpeg的安装,这些都是构建流媒体服务器的基础。 **详细知识点**: 1. **Nginx-RTMP模块**:Nginx的...
整篇文章通过具体的实践案例,详细说明了如何在不同的操作系统上使用Tomcat和Nginx搭建视频服务器,并通过ffmpeg工具处理视频文件以支持HLS协议的视频点播服务。这是一个涉及Web服务器配置、音视频编码和网络安全等...
本文介绍的是利用nginx和ffmpeg搭建流媒体服务器的过程。例如这种场景:公司内部需要同时观看在线直播时,如果每个人直接观看必然给出口带宽带来压力,影响正常访问外网的同事。所以可以在内网通过nginx+ffmpeg拉...
本教程将详细介绍如何在Win10系统上配置和运行Nginx流媒体服务器,并使用OBS Studio进行推流,以及使用VLC media player进行拉流测试。 首先,确保你已经准备好了以下软件: 1. Nginx服务器:你可以从...