电脑|网络基于Nginx的mp4、flv流媒体解决方案

米花 发表 于:4年前 浏览量:433

Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案.这两个东西通过一个nginx的模块nginx-rtmp-module,组合在一起即可以搭建一个功能相对比较完善的流媒体服务器.

这个流媒体服务器可以支持RTMP和HLS(Live Http Stream)。

nginx配合ffmpeg做流媒体服务器的原理是: nginx通过rtmp模块提供rtmp服务, ffmpeg推送一个rtmp流到nginx, 然后客户端通过访问nginx来收看实时视频流. HLS也是差不多的原理,只是最终客户端是通过HTTP协议来访问的,但是ffmpeg推送流仍然是rtmp的。


rtmp(Real Time Messaging Protocol)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。
它有三种变种:

  1. 工作在TCP之上的明文协议,使用端口1935;
  2. RTMPT封装在HTTP请求之中,可穿越防火墙;
  3. RTMPS类似RTMPT,但使用的是HTTPS连接;

RTMP协议就像一个用来装数据包的容器,这些数据可以是AMF格式的数据,也可以是FLV中的视/音频数据。一个单一的连接可以通过不同的通道传输多路网络流。这些通道中的包都是按照固定大小的包传输的。

开源RTMP server

  1. red5 java  有名
  2. crtmpserver c++ 支持多种rtmp协议,移动设备以及IPTV相关网络协议;Erlyvideo  erlong有开源和商业版本
  3. aXeVideo haXe 一个实验性的,轻量级的服务器
  4. FluorineFx .Net To be defined
  5. nginx-rtmp c nginx模块,支持rtmp和HLS

Nginx rtmp功能点

  • 支持音视频直播
  • 支持flv/mp4视频格式,输入可以是文件或者HTTP流
  • 支持两种流的分发模式 pushand pull
  • 可以将直播流录制成flv文件
  • H264/AAC编码
  • 支持在线转码 Online transcoding with FFmpeg
  • 支持HLS (HTTP LiveStreaming)需要 libavformat (>= 8. 53.31.100) from ffmpeg (ffmpeg.org)
  • HTTP callbacks (publish/play/record/update etc)
  • 支持外部程序(exec)
  • HTTP control module for recording audio/video and dropping clients
  • 先进内存控制技术,可以在使用少量内存的情况下完成流畅的直播功能。
  • 可以和以下协同工作。FMS server(Wirecast, FMS, Wowza,)Player(JWPlayer, FlowPlayer, StrobeMediaPlayback,)外部程序(ffmpeg,avconv,rtmpdump,flvstreamer )
  • Statistics in XML/XSL in machine- & human- readable form
  • 支持跨平台 Linux/FreeBSD/MacOS

项目地址:https://github.com/arut/nginx-rtmp-module
nginx-rtmp-module Directives:https://github.com/arut/nginx-rtmp-module/wiki/Directives

总的来说Nginx-rtmp是个比较轻量的项目,可以满足直播的采集,编码和分发工作,该项目丰富的完善了nginx对视频的支持,特别的nginx-rtmp实现了对HLS的支持。


HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。由此可见,基本上可以认为,HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。


一个实验: http://www.linuxidc.com/Linux/2013-02/79118.htm

实验目的:让Nginx支持flv和mp4格式文件,同时支持Rtmp协议;同时打开rtmp的hls功能
 使用ffmpeg来完成对flv、mp4、mp3等格式的转化(点播实验暂时不测试)
 
一、准备工作
 模块:nginx_mod_h264_streaming(支持h264编码的视频)
 模块:http_flv_module 支持flv
 模块:http_mp4_module 支持mp4
 下载地址:
 http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
 http://nginx.org
 https://github.com/arut/nginx-rtmp-module

本文由 米花发表。转载请注明出处:https://www.mihua.net/list/0/16252.html

发表评论

您的昵称:

猜你喜欢

最近更新