您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

一篇文章带你FFmpeg到流媒体服务器开发

时间:2020-05-18 09:45:41  来源:  作者:

安装ffmpeg:

下载FFmpeg和libx264的包ffmpeg-2.4.1.tar.bz2 last_x264.tar.bz2libx264需要yasm,所以先安装yasm

  1. apt-get install yasm

然后安装libx264

  1. aptitude install libx264-dev

也可以手动安装libx264(原先libx264在ubuntu的软件源里是没有的只能手动安装,现在有了就可以不用手动安装了)解压缩libx264

  1. tar -xjvf last_x264.tar.bz2

安装libx264

./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

  1. tar -xjvf ffmpeg-2.4.1.tar.bz2

然后编译安装

./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-pthreads --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libx264 --enable-libxvid --enable-x11grab --enable-libvorbis

make

make install

Nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器

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

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

从安装开始

Nginx的安装参照我之前的这个: 
http://blog.csdn.net/redstarofsleep/article/details/45092127

不同的是在configure的时候需要增加nginx-rtmp-module的支持,下载好nginx-rtmp-module后解压,然后nginx安装时增加这个模块(--add-module),其它都是一样的.

./configure --prefix=/usr/local/nginx --with-pcre=/home/user/pcre/pcre-8.32 --with-zlib=/home/user/zlib/zlib-1.2.8 --with-openssl=/home/user/openssl/openssl-1.0.1i --add-module=/home/user/nginx-rtmp-module

FFMPEG的安装参照上一篇: 
http://blog.csdn.net/redstarofsleep/article/details/45092145

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

一篇文章带你FFmpeg到流媒体服务器开发

 

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

首先在里面加入rtmp的配置

rtmp {

server {

listen 1935;

 

Application myapp {

live on;

}

application hls {

live on;

hls on;

hls_path /tmp/hls;

}

}

}

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

location /hls {

types {

application/vnd.apple.mpegurl 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:downloadfilmaqgy2.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:downloadfilmaqgy2.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/hls/test2.m3u8

最后贴上一段对于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网址
https://github.com/arut/nginx-rtmp-module

 

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

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

error_log logs/error.log debug;#error_log logs/error.log notice;#error_log logs/error.log info;

#pid logs/nginx.pid;

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 stat.xsl;}

location /stat.xsl {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/test/nginx.conf

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

6、访问
http://192.168.11.75:8080/stat,可以看到统计情况

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 server.3

2.1当前的流媒体server.3

2.2Wowza功能...3

3.Nginx-based RTMP server.5

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中的视/音频数据。一个单一的连接可以通过不同的通道传输多路网络流。这些通道中的包都是按照固定大小的包传输的。

一篇文章带你FFmpeg到流媒体服务器开发

 

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



Tags:流媒体服务器   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
当客户端推流RTMP数据发到SRS流媒体服务器,如果正确配置SRS流媒体服务器,可以输出HTTP-FLV的码流,拉流端就可以成功拉取到,那这个详细过程是怎样呢?本篇文章就来详细分析。先回顾...【详细内容】
2021-03-25  Tags: 流媒体服务器  点击:(303)  评论:(0)  加入收藏
流媒体服务器的性能可以从抗抖动能力、拥塞率和卡顿率等方面进行分析。当用户访问的频率过高或者并发的数量超过流媒体服务器所能承受的范围时,必须考虑通过限流来保证接口的...【详细内容】
2020-12-09  Tags: 流媒体服务器  点击:(133)  评论:(0)  加入收藏
Emby 是一款开源的流媒体中心软件,用户只需要简单部署了服务端,其它的客户端就能轻松访问服务端的所有媒体软件 。Emby服务端和客户端安装都十分简单,只需要去Emby官网找到合...【详细内容】
2020-11-30  Tags: 流媒体服务器  点击:(1052)  评论:(0)  加入收藏
0.引言本文主要讲解如何搭建RTSP流媒体服务器的过程,使用开源项目ZLMediaKit。通过这个开源项目,推RTSP流到服务器,然后拉流端可以拉取RTSP、RTMP等流。ZLMediaKit码云链接:http...【详细内容】
2020-11-12  Tags: 流媒体服务器  点击:(383)  评论:(0)  加入收藏
SRS is a RTMP/HLS/WebRTC/SRT/GB28181 streaming cluster, high efficiency, stable and simple. SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实...【详细内容】
2020-09-07  Tags: 流媒体服务器  点击:(416)  评论:(0)  加入收藏
Jellyfin 是一个开源的软件媒体系统,用于控制和管理媒体和流媒体。它是 emby 和 plex 的替代品,它通过多个应用程序从专用服务器向终端用户设备提供流媒体。Jellyfin 属于 Emb...【详细内容】
2020-09-01  Tags: 流媒体服务器  点击:(289)  评论:(0)  加入收藏
总结有福利C++实现RTSP/RTP流媒体服务器,同时支持Linux和Windows编译环境。使用VLC客户端测试通过。实现RTSP的OPTIONS、DESCRIBE、SETUP、PLAY、PAUSE、TEARDOWN,实现SDP生成...【详细内容】
2020-08-18  Tags: 流媒体服务器  点击:(65)  评论:(0)  加入收藏
实验目的:让Nginx支持flv和mp4格式文件,同时支持Rtmp协议;同时打开rtmp的hls功能 资料: HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体 网络传输协议...【详细内容】
2020-08-17  Tags: 流媒体服务器  点击:(141)  评论:(0)  加入收藏
目录整天框架分析rtmp拉流分析rtmp推流分析hls拉流分析hsl推流分析http-flv拉流分析http-flv推流分析ffmpeg转码分析首屏秒开技术分析1.1 RTMP的简介RTMP是Real Time Messag...【详细内容】
2020-07-22  Tags: 流媒体服务器  点击:(140)  评论:(0)  加入收藏
作为开发者,我们需要有一个服务器来支持新视频行业的互联网化,有哪个开源方案能支持新爆发的业务?该方案需要支持哪些关键的能力或需求?本文由自阿里云RTC服务器团队负责人杨成...【详细内容】
2020-06-02  Tags: 流媒体服务器  点击:(76)  评论:(0)  加入收藏
▌简易百科推荐
阿里云镜像源地址及安装网站地址https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b111kK44P更新源之前把之前的国外的镜像先备份一下 切换到yumcd...【详细内容】
2021-12-27  干程序那些事    Tags:CentOS7镜像   点击:(1)  评论:(0)  加入收藏
前言在实现TCP长连接功能中,客户端断线重连是一个很常见的问题,当我们使用netty实现断线重连时,是否考虑过如下几个问题: 如何监听到客户端和服务端连接断开 ? 如何实现断线后重...【详细内容】
2021-12-24  程序猿阿嘴  CSDN  Tags:Netty   点击:(12)  评论:(0)  加入收藏
一. 配置yum源在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repovim /etc/yum.repos.d/google-chrome.repo按i进入编辑模式写入如下内容:[google-chrome]name=googl...【详细内容】
2021-12-23  有云转晴    Tags:chrome   点击:(7)  评论:(0)  加入收藏
一. HTTP gzip压缩,概述 request header中声明Accept-Encoding : gzip,告知服务器客户端接受gzip的数据 response body,同时加入以下header:Content-Encoding: gzip:表明bo...【详细内容】
2021-12-22  java乐园    Tags:gzip压缩   点击:(9)  评论:(0)  加入收藏
yum -y install gcc automake autoconf libtool makeadduser testpasswd testmkdir /tmp/exploitln -s /usr/bin/ping /tmp/exploit/targetexec 3< /tmp/exploit/targetls -...【详细内容】
2021-12-22  SofM    Tags:Centos7   点击:(7)  评论:(0)  加入收藏
Windows操作系统和Linux操作系统有何区别?Windows操作系统:需支付版权费用,(华为云已购买正版版权,在华为云购买云服务器的用户安装系统时无需额外付费),界面化的操作系统对用户使...【详细内容】
2021-12-21  卷毛琴姨    Tags:云服务器   点击:(6)  评论:(0)  加入收藏
参考资料:Hive3.1.2安装指南_厦大数据库实验室博客Hive学习(一) 安装 环境:CentOS 7 + Hadoop3.2 + Hive3.1 - 一个人、一座城 - 博客园1.安装hive1.1下载地址hive镜像路径 ht...【详细内容】
2021-12-20  zebra-08    Tags:Hive   点击:(9)  评论:(0)  加入收藏
以下是服务器安全加固的步骤,本文以腾讯云的CentOS7.7版本为例来介绍,如果你使用的是秘钥登录服务器1-5步骤可以跳过。1、设置复杂密码服务器设置大写、小写、特殊字符、数字...【详细内容】
2021-12-20  网安人    Tags:服务器   点击:(7)  评论:(0)  加入收藏
项目中,遇到了一个问题,就是PDF等文档不能够在线预览,预览时会报错。错误描述浏览器的console中,显示如下错误:nginx代理服务报Mixed Content: The page at ******** was loaded...【详细内容】
2021-12-17  mdong    Tags:Nginx   点击:(7)  评论:(0)  加入收藏
转自: https://kermsite.com/p/wt-ssh/由于格式问题,部分链接、表格可能会失效,若失效请访问原文密码登录 以及 通过密钥实现免密码登录Dec 15, 2021阅读时长: 6 分钟简介Windo...【详细内容】
2021-12-17  LaLiLi    Tags:SSH连接   点击:(16)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条