安装Ffmpeg:

要下载适用于FFmpeg和libx264的软件包la,需要yasm,因此首先安装yasm

安装Apt-get install yasm,然后安装libx264

Aptitude install libx264-dev还可以手动安装libx264。最初,libx264不在Ubuntu的软件源中。只能手动安装,现在不需要手动安装。可以解压缩libx264

安装tar-xjvf la libx 264

./configure-enable-shared-enable-pic

Make

Make install

然后安装ffmpeg。ffmpeg有很多从属软件包,1 .必须先安装libfaac

Aptitude install libfaac-dev

2.libmp3lame

Aptitude install libmp3lame-dev

3.libtheora

Aptitude install libtheora-dev

4.libvorbis

Aptitude install libvorbis-dev

5.libxvid

Aptitude install libxvidcore-dev

6.libxext

Aptitude install libxext-dev

7.libxfixes

Aptitude install libxfixes-dev

如果在安装从属软件包后安装ffmpeg,ffmpeg将首先解压缩

Tar -xjvf然后编译安装

./configure-prefix=/usr/local/Ffmpeg-enable-GPL-enable-version 3-enable-nonfree-

Make

Make install

Nginx nginx-RTMP-module ffmpeg流媒体服务器部署:

Nginx本身是非常好的HTTP服务器,FFMPEG是非常好的音频视频解决方案。这两者通过一个nginx模块nginx-rtmp-module结合在一起,就可以创建功能相对完善的流媒体服务器。

该流媒体服务器可以支持rtmp和实时http流(HLS)

从安装开始

Nginx的安装参考我以前的这个:

不同之处在于,在configure时需要添加对nginx-rtmp-module的支持,下载并解压缩nginx-rtmp-module,然后在nginx安装时添加此模块(- add-module)

./configure-prefix=/usr/local/nginx-with-pcre=/home/user/pcre-with-

FFMPEG安装参考之前:

Nginx与ffmpeg一起创建流媒体服务器的原理是: nginx通过rtmp模块提供rtmp服务,ffmpeg将rtmp推送到nginx,然后客户端访问nginx观看实时视频流。HLS也是差不多的原理。但是,最终客户端是通过HTTP协议访问的,而ffmpeg是

安装完成后,打开Nginx配置文件nginx.conf进行配置

首先把rtmp配置放在里面。

Rtmp {

服务器{

> listen 1935;

application myapp {

live on;

}

application hls {

live on;

hls on;

hls_path /tmp/hls;

}

}

}

然后,针对hls,还需要在http里面增加一个location配置


location /hls {

types {

application m3u8;

video/mp2t ts;

}

root /tmp;

add_header Cache-Control no-cache;

}

这是一个最简单,最基础的配置, rtmp监听1935端口,如果是hls的话用hls on开启hls,并且为hls设置一个临时文件目录hls_path /tmp/hls; 其它更高级的配置可以参看nginx-rtmp-module的readme,里面有比较详细的介绍其它的配置,并且它还提供了一个通过JWPlayer在网页上播放的例子.

保存完配置文件后,启动nginx,通过netstat -ltn命令可以看到增加了一个1935端口的监听.8080是nginx默认的http监听端口.

[java] view plaincopy

# netstat -ltn

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN

tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:1935 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN

tcp6 0 0 :::22 :::* LISTEN

tcp6 0 0 ::1:631 :::* LISTEN

然后用ffmpeg推流到nginx:

第一个是推到了上面配置的myapp上:

[java] view plaincopy

ffmpeg -re -i "D:\download\film\aqgy\02.mp4" -vcodec libx264 -vprofile baseline -acodec aac

-ar 44100 -strict -2 -ac 1 -f FLV -s 1280x720 -q 10 rtmp://server:1935/

myapp/test1

第二个推送到hls上:

[java] view plaincopy

ffmpeg -re -i "D:\download\film\aqgy\02.mp4" -vcodec libx264 -vprofile baseline -acodec aac

-ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://ip:1935/

hls/test2

现在我们的流媒体服务器有两个实时流了,一个是rtmp的,另一个是hls的,用流媒体播放器播放一下,流媒体播放器可以用vlc也可以用ffmpeg带的ffplay.手机也是可以播放的.

上面这两个流的地址分别是:

第一个就是推送的地址: rtmp://serverIp:1935/myapp/test1

第二个是HTTP地址: http://serverIp:8080/hl

最后贴上一段对于HLS这个比较特殊的流媒体协议的解释:


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

用开源nginx-rtmp-module搭建flash直播环境

1、将nginx和nginx-rtmp-module的源码包解压PS:nginx-rtmp-module网址


2、进入nginx的源代码目录,编译./configure --add-module=<path-to-nginx-rtmp-module> --without-http_rewrite_modulemakemake install

3、写一个测试配置文件#user nobody;worker_processes 1;

error_log log debug;#error_log log notice;#error_log log info;

#pid log;

events {worker_connections 1024;}

rtmp {server {listen 1935;

chunk_size 4096;

application myapp {live on;}}}

http {server {listen 8080;

location /stat {rtmp_stat all;rtmp_stat_stylesheet ;}

location / {root /home/arut-nginx-rtmp-module-e5d61f2/;}

location / {root /home/arut-nginx-rtmp-module-e5d61f2/test/rtmp-publisher;}}}

4、启动nginx/usr/local/nginx/sbin/nginx -c /home/arut-nginx-rtmp-module-e5d61f2/te

5、用ffmpeg产生一个模拟直播源,向rtmp服务器推送ffmpeg -re -i ~ -f flv rtm注意,源文件必须是H.264+AAC编码的。192.168.11.75是运行nginx的服务器IP

6、访问,可以看到统计情况


7、网页播放测试,用nginx-rtmp-module自带的一个例子修改,

8、HLS测试(2013-4-20更新)修改测试的配置文件

nginx-rtmp-module还有许多其他特性,例如支持FLV/MP4的点播、HLS直播、多worker工作模式、push and pull工作模式等,以后慢慢挖掘

Nginx-RTMP功能调研:

1. RTMP协议介绍...2

2.RTMP

2.1当前的流媒体

2.2Wowza功能...3

3.Nginx-based RTMP

3.1 Nginx rtmp 功能点...5

3.2编译nginx rtmp模块...6

3.3配置以及功能介绍...6

3.4用nginx-rtmp-module搭建直播环境...8

3.5Nginx rtmp对于HLS支持...13

协议介绍

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

它有三种变种:

1)工作在TCP之上的明文协议,使用端口1935;

2)RTMPT封装在HTTP请求之中,可穿越防火墙;

3)RTMPS类似RTMPT,但使用的是HTTPS连接;需要可以后台私信‘资料’

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


关注,私信【资料】免费获取!
大厂C++面试题库、BAT架构技术资料库(关注小编,后台私信【资料】)资料内容涵盖BAT架构技术与面试真题,减少你到处搜索资料的时间,成体系的实战技术知识,让你面试、进阶都更加容易!

1.《【aqgy4】文章将FFmpeg导入流媒体服务器开发。》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《【aqgy4】文章将FFmpeg导入流媒体服务器开发。》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/auto/3121750.html