Linux-Nginx+rtmp+ffmpeg搭建流媒体服务器-程序员宅基地

技术标签: 运维  操作系统  ffmpeg  

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

说明:

  nginx搭建流媒体服务需要用到 nginx-rtmp-module 模块

具体操作步骤:

安装nginx

(1)下载第三方扩展模块nginx-rtmp-module

# mkdir module && cd module          //创建一个存放模块的目录
# wget https://github.com/arut/nginx-rtmp-module/archive/master.zip        //下载模块
# unzip master.zip                //解压
# ls nginx-rtmp-module-master/         //查看模块目录

(2)编译安装nginx说明:此处由于我这边已有lnmp运行项目的环境,直接动态添加的 nginx-rtmp-module模块; 动态参加可参考这里

# yum -y install pcre-devel openssl openssl-devel        //安装依赖
# wget http://nginx.org/download/nginx-1.12.2.tar.gz        //下载nginx包
# tar xf nginx-1.12.2.tar.gz
# ./configure --prefix=/opt/nginx-1.9.5 --add-module=/root/module/nginx-rtmp-module-master --with-http_ssl_module    //编译安装nginx,并指定上面下载的模块路径
# make        
# make install

(3)修改nginx配置文件,添加如下内容并重新载入配置文件

# vim nginx.conf
rtmp {  
    server {  
        listen 1935;      #监听的端口号
        application myapp {     #自定义的名字
            live on;  
       }  
        application hls {  
            live on;  
            hls on;  
            hls_path /tmp/hls;   
            hls_fragment 1s;
            hls_playlist_length 3s;  
       }  
    } 
}
# /etc/init.d/nginx reload
user  root;
worker_processes  4;
worker_cpu_affinity 1000 0100 0010 0001;
worker_rlimit_nofile 30000;


#error_log  logs/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  30000;
    use epoll;
}

rtmp {  
    server {  
        listen 1935;  
        application myapp {  
            live on;  
       }  
       application hls {  
         live on;  
             hls on;  
             hls_path /tmp/rtmp/hls;  
             hls_fragment 1s;
         hls_playlist_length 3s;  
       }  
    } 
}


http {

    limit_req_zone  $binary_remote_addr  zone=req_one:10m rate=1r/s;

    autoindex off;
    include       /opt/nginx-1.9.5/conf/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" $http_x_forwarded_for $request_length $request_time "$upstream_response_time" "$upstream_addr" $host $server_addr';
                     
                      

    #access_log  logs/access.log  main;
    server_tokens off;
    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    gzip  on;
    gzip_min_length  1K;
    gzip_buffers   4 16K;
    gzip_comp_level   8;
    gzip_http_version 1.0;
    gzip_types    application/json  text/javascript  text/plain application/x-javascript text/css application/xml  text/xml;
    #gzip_types    application/json  text/javascript  text/plain application/x-javascript text/css application/xml  text/xml image/jpeg image/gif image/png;
    gzip_disable "MSIE [1-6]\.";
    client_max_body_size 500M;


    #server {
    #    listen 80 default;
    #    return 500;
    #}

    include /opt/nginx-1.9.5/conf/conf.d/*.conf;

    
}
完整nginx.conf

安装ffmpeg

ffmpeg命令参考这位朋友的文章:https://www.jianshu.com/p/049d03705a81

(1)安装依赖

# yum install yasm -y

(2)下载ffmpeg并安装

# git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg    //下载ffmpeg
# cd ffmpeg
# ./configure --prefix=/usr/local/ffmpeg
# make
# make install

(3)拷贝命令到/usr/bin(方便后面调用)

# ls /usr/local/ffmpeg/        //查看安装目录生成的文件
bin  include  lib  share
# cp /usr/local/ffmpeg/bin/* /usr/bin/

测试

(1)启用ffmpeg进行推流

# ffmpeg -i rtsp://192.168.1.175:554/11 -acodec aac -strict experimental -ar 44100 -ac 2 -b:a 96k -r 25 -b:v 500k -s 640*480 -f flv rtmp://192.168.1.11:1935/myapp/23
-i 要处理视频文件的路径,此处地址是一个监控摄像头
-s 像素
rtmp://192.168.1.11:1935/myapp/23  说明:rtmp://IP:PORT/ myapp指nginx配置文件中自定义的,22指输出文件的名字
-f 强迫采用flv格式
别的参数参考上面那位老兄的

 (2)打开VLC 媒体——>流——>网络

 

(3)进入服务器查看输出的位置可以发现已生成文件

# ll /tmp/hls/
total 1636
-rw-r--r-- 1 root root 500644 Mar 28 17:05 22-1955.ts
-rw-r--r-- 1 root root 384460 Mar 28 17:05 22-1956.ts
-rw-r--r-- 1 root root 413036 Mar 28 17:05 22-1957.ts
-rw-r--r-- 1 root root 366036 Mar 28 17:05 22-1958.ts
-rw-r--r-- 1 root root    154 Mar 28 17:05 22.m3u8

(4)还可以使用浏览器这样访问 http://192.168.1.11/hls/22.m3u8

 

至此就搭建完成了,至于别的操作后续再写

 

转载于:https://www.cnblogs.com/yanjieli/p/10615638.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30338461/article/details/96173375

智能推荐

电力英语计算机考试,电力系统的计算机考试和电力英语一起考才有效吗?-程序员宅基地

文章浏览阅读372次。aoshouyi新兵答主05-30TA获得超过1029个赞1 引言电力系统继电保护是保证电力系统安全运行、提高经济效益的有效技术。计算机控制技术成功运用到电力系统继电保护中,使得未来继电保护技术发展趋势具有计算机化、网络化、智能化等特点。我国继电保护学科、技术、继电器制造和人才队伍培养从无到有,在小活吸收国外先进继电保护设备和运行技术的基础上,建成了一支具有深厚理论功底和丰富运行经验的继电保护队伍..._电力计算机和英语考试的比中

用xshell7和xftp7连接虚拟机CentOS7.6的步骤_xftp7如何连接cegtos7-程序员宅基地

文章浏览阅读2.2k次,点赞4次,收藏19次。xshell7和xftp7连接虚拟机CentOS7.6_xftp7如何连接cegtos7

AppleScript的终极入门手册-程序员宅基地

文章浏览阅读1.8k次。转载自:http://www.jayz.me/?p=267首先Jay必须先声明本文的出处,Jay十分尊重别人的劳动,这个文章只是我翻译来的,原文在http://mac.appstorm.net,如果对原文感兴趣的同学请前往阅读。好了,我们开始吧!AppleScript 是 Mac OS X内置的一种功能强大的脚本语言,使用 AppleScript 的目的是把一些重复繁琐并且

解决QT no service found for – org.qt-project.qt.mediaplayer问题_no service found for - "org.qt-project.qt.mediapla-程序员宅基地

文章浏览阅读5.7k次,点赞5次,收藏18次。参考:https://nachega.com/2018/12/19/how-to-solve-defaultserviceproviderrequestservice-no-service-found-for-org-qt-project-qt-mediaplayer/no service found for – org.qt-project.qt.mediaplayer由于QT的MultiMedia依赖于Gstreamer的,因此需要装好gstreamer的几个库:![d429468da86_no service found for - "org.qt-project.qt.mediaplayer

android ios 垃圾回收,iOS 面试题(16):解释垃圾回收的原理-程序员宅基地

文章浏览阅读220次。注:本文摘自唐巧博客,方便以后查阅。请谅解问题我们知道,Android 手机通常使用 Java 来开发,而 Java 是使用垃圾回收这种内存管理方式。 那么,ARC 和垃圾回收对比,有什么优点和缺点?考查点此题其实是考查大家的知识面,虽然做 iOS 开发并不需要用到垃圾回收这种内存管理机制。但是垃圾回收被使用得非常普遍,不但有 Java,还包括 JavaScript, C#,Go 等语言。如果两个..._ios app没续费会被回收吗

自动化部署工具Jenkins的介绍以及Centos系统下的源码搭建_jerkins源码-程序员宅基地

文章浏览阅读736次。一、Jenkins介绍Jenkins是一个开源的、可扩展的持续CI【集成】、CD【交付】、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的什么平台,可以处理任何类型的构建或持续集成。Jenkins是一个非常有名的CI工具,开源、免费,通过jenkins可以更加智能、快速的持续集成,尽早的发现代码里的问题并及时的部署上去。二、Jenkins特性1、Jenkins是利用java语言编写的,支持CI,CD;2、易于安装部署配置:可通过yum安装,或下载ra_jerkins源码

随便推点

PyQt5 动态更新tableWidget方法_pyqt5 tablewidget更新-程序员宅基地

文章浏览阅读3.2k次。self.name_tableWidget.clearContents() # 数据 arr = self.db2.select_sample_step_region(sample_id) self.name_tableWidget.setRowCount(len(arr))有事,晚点补代码_pyqt5 tablewidget更新

mysql修改某个字段(替换关键字内容)_mysql 替换关键字-程序员宅基地

文章浏览阅读1.9w次,点赞3次,收藏9次。mysql修改某个字段(替换关键字内容),UPDATE 表名 SET 字段名= REPLACE( 替换前的字段值, '替换前关键字', '替换后关键字' ) WHERE 条件。举例:update goods_table SET goods_name = REPLACE( goods_name, '2017', '2018' ) where goods_name like '%2017%..._mysql 替换关键字

jquery css3问卷答题卡翻页动画效果-程序员宅基地

文章浏览阅读300次。这个选项调查的特效以选项卡的形式,每答完一道题目自动切换到下一条,颇具特色。使用jQuery和CSS3,适合HTML5浏览器。效果展示 http://hovertree.com/texiao/jquery/87/源码下载:http://hovertree.com/h/bjaf/sym1l16q.htm效果图如下:代码如下:<!DOCTYPE html><html&gt..._问卷答题效果

java 企业付款_JAVA微信支付——企业付款(企业向微信用户个人付款、转账)-程序员宅基地

文章浏览阅读214次。packagecom.weixinpay;importorg.apache.commons.lang.StringUtils;importorg.jdom.Document;importorg.jdom.Element;importorg.jdom.JDOMException;importorg.jdom.input.SAXBuilder;importjava.io.ByteArrayInputS..._企业微信付款到个人微信java代码实现

Linux上ElasticSearch IK中文分词插件安装及使用_linux中文插件-程序员宅基地

文章浏览阅读5.3k次,点赞2次,收藏7次。背景: Centos7.3服务器上现有elasticsearch 5.4.0集群,共三台机器。 安装ik插件必须和es版本对应!一、官网下载安装该插件Github官网地址:https://github.com/medcl/elasticsearch-analysis-ik 我们可以清楚地看到: 有两个选项,其中第二个选项是直接通过命令行安装,但是v5.5.1版本之后才支持,..._linux中文插件

常用 Linux 软件汇总,足够用了!!!-程序员宅基地

文章浏览阅读261次。音频Airtime - Airtime 是一款用于调度和远程站点管理的开放广播软件Ardour - 在 Linux 上录音,编辑,和混音Audacious - 开源音频播放器,按你想要的方..._符合unix哲学的linux软件