Nginx-rtmp流媒体服务器及使用ffmpeg推流_nginx-dependence-程序员宅基地

技术标签: 视音频与图像处理  

1、安装Nginx依赖
创建nginx-dependence文件夹,在该文件夹中安装依赖:

mkdir nginx-dependence
cd nginx-dependence

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
tar -zxvf pcre-8.40.tar.gz
cd pcre-8.40/
./configure
make
sudo make install

wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11/
./configure
make
sudo make install

wget https://www.openssl.org/source/old/1.1.0/openssl-1.1.0.tar.gz
tar -zxvf openssl-1.1.0.tar.gz
cd openssl-1.1.0/
./config
make
sudo make install

在nginx-dependence目录中,先下载nginx-rtmp-module
git clone https://github.com/arut/nginx-rtmp-module.git

2、安装Nginx
首先运行:

apt-get install build-essential
apt-get install libtool

然后下载源码,并进行编译:

mkdir nginx

wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar -zxvf nginx-1.12.0.tar.gz
cd nginx-1.12.0/

./configure --prefix=/home/xxxxxx/nginx --with-pcre=../nginx-dependence/pcre-8.40 --with-zlib=../nginx-dependence/zlib-1.2.11 --with-openssl=../nginx-dependence/openssl-1.1.0  --with-http_ssl_module --add-module=../nginx-dependence/nginx-rtmp-module
make
sudo make install

启动和停止nginx服务器:

sudo /home/xxxxxx/nginx/sbin/nginx
sudo /home/xxxxxx/nginx/sbin/nginx -s stop

如果没有报任何错误,则可以打开浏览器看看nginx是否启动成功。
打开浏览器,输入localhost 或本机的IP地址,按回车,如果看到下面的界面,说明nginx已经安装成功并且启动成功了。
在这里插入图片描述
3、配置Nginx流媒体服务器
nginx服务器有一个配置文件叫做nginx.conf ,这个文件默认是位于/home/xxxxxx/nginx/conf 目录下。
我将这个文件改成这样:

#user  nobody;
worker_processes  1;

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

#pid        logs/nginx.pid;

error_log logs/error.log debug;

events {
    
    worker_connections  1024;
}

rtmp{
    
     server{
    
        listen 1935;
        application videotest{
    
            live on;
        }
    }
}

http {
    
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
    
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
    
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
    
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
    
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
    
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
    
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

其中rtmp就是rtmp服务器模块。
可以通过访问rtmp://localhost/videotest 来访问videotest这个资源。
live on 表示这是实时的传输。

4、使用 ffmpeg 推流本地视频,使用ffplay查看
在这里插入图片描述

-re : 表示使用文件的原始帧率进行读取
-i :这个参数表示输入 ,后面参数就是输入文件
vcodec copy : -vcodec表示使用的视频编解码器 ,前缀v表示video,copy  表示复制使用源文件的视频编解码器。
-acodec copy : -acodec表示使用的音频编解码器,前缀a表示audio,copy 表示使用源文件的音频编解码器。
-b:v 800k : -b:v表示视频的比特率(bitrate) ,为800k。
-b:a 32k : 表示音频的比特率为32k。
-f flv : -f表示format ,强制输出格式为flv,也叫封装(mux),封装要做的事就是把视频和音频混合在一起,进行同步。
rtmp://localhost/videotest 表示输出的"文件名",这个文件名可以是一个本地的文件,也可以指定为rtmp流媒体地址(推流)。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/z_muyangren/article/details/86656573

智能推荐

Java cas 实例 客户端配置_java集成cas的客户端代码-程序员宅基地

文章浏览阅读2.2k次。第二步 客户端web应用程序集成CAS1. 从官网下载CAS Client, 将客户端的jar, cas-client-core-3.2.1.jar commons-logging-1.1.jar 引入到web应用程序的classpath中2 .配置web.xml文件, 主要是添加过滤器拦截通信, 下面的实例代码, 假设web应用程序的端口是8888 _java集成cas的客户端代码

celery-redis 的测试demo_redis的测试demo-程序员宅基地

文章浏览阅读1.1k次。celery 安装sudo pip3 install celeryredis安装sudo apt install redis-serverredis 启动redis-server测试redis是否启动user@host: ~$ redis-cli127.0.0.1:6379> pingPONG如图创建 celery_app_1.p..._redis的测试demo

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException.....-程序员宅基地

文章浏览阅读3k次。记一个报错。控制台输出了太多log,但是需要一点点去查找。细心的话一眼就可以看出来了–You must specify ‘javaType’ or ‘resultMap’.mybatis利用resultMap复杂类型时。在创建映射泛型为对象时,添加 javaType=“list”。Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'secu_caused by: org.springframework.beans.factory.unsatisfieddependencyexception:

python读取文件模式_5种python常用读写文件方法精讲-程序员宅基地

文章浏览阅读1.2k次。5种python常用读写文件方法精讲python读写文件需要先使用open函数获得文件对象,open函数中有一个 mode参数,默认为'r' ,在不同的应用场景下,要选择不同的模式,下表是mode参数的可选值列表访问模式说明r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。a打开一个文件用于追加。如..._python 文件以读写方式

秀米如何在布局里面画图_毫无基础的人如何学习 CAD?-程序员宅基地

文章浏览阅读199次。卧C,收藏数是点赞的5倍。。。我不想写经历,不知道为什么只想粗暴的来点干货知识。AutoCAD上手入门很难吗?按照狗血剧情来说,我一定会回答一点都不难,只要你多用心多练习!废话不说了,按照顺序点击下面的卡片,花10分钟看完他们,再去打开CAD操作试试瞧!其实这些秘籍不只是能让你入门,更是一个学习CAD的方向,如果能吃通它们,那你就是大神了!《AutoCAD 控制大法》——学习要趁早,起步早些好 -..._秀米可以画图形吗

随便推点

详解神经网络(Neural Network)-程序员宅基地

文章浏览阅读2.1k次。读《Python神经网络编程》总结一些归纳计算机编程语言可以理解矩阵计算,并认识到潜在的计算方法的相似性,这允许计算机高速高效地进行这些计算,算出X = W • I ,而无需我们对每一层的每个节点给出单独的计算指令。为什么让误差反向传播到网络的每一层呢?原因是,我们使用误差来指导如何调整链接权重,从而改进神经网络输出的总体答案。为了避免终止于错误的山谷或错误的函数最小值,我们从山上的不同...

Vue学习-2_vue pathvariable-程序员宅基地

文章浏览阅读148次。这里写目录标题模块化webpackwebpack安装:webpack.config.jsloader导入css相关:导入图片相关webpack插件webpack-dev-server搭建本地服务器webpack整合vue脚手架更改默认配置路由路由懒加载路由嵌套路由参数传递路由全局导航守卫keepalivevueX vue状态管理工具。axios整合elementui作为一个java后端开发,最近有时候会用到Vue进行前端开发,特地来补课. 此篇博客作为我学习Vue的一个记录,以及知识汇总.不会把知识点罗_vue pathvariable

Python获取所有股票代码以及股票历史成交数据分析(二)_stock.csv-程序员宅基地

文章浏览阅读8k次,点赞8次,收藏47次。接上一篇获取完股票代码信息后,我们打开东方财富网,一通瞎点,进到某股票的K线板块打开调试界面,XHR中并没有我们想要的数据,从网页数据加载来看应该不是实时资源的肯定有个传输的地方,我们先清空完所有Network的资源然后把鼠标放到K线上可以从后台再次获取传输数据,获取到数据立刻按按钮暂停获取,不然数据增多影响我们排查数据获取的Url,很快我们就可以查到JSON数据的url该JSON数据获取地址的url为:http://56.push2his.eastmoney.com/api/qt/stock/_stock.csv

linux中klocwork步骤,linux环境下的klockwork、fortify、c++ test比较-程序员宅基地

文章浏览阅读491次。前一段时间,因为一些需要,分别在linux环境下试用了klockwork、foritfy、c++ test等可以静态走查软件代码的工具,现从各方面说一下个人使用的一些感受。1)安装方面三个软件安装都比较简单,基本上都是几个步骤完在安装。2)操作方面三个软件的操作都很简单,但是相对来说,个人感觉fortify会繁琐一些,每分析一个项目都要设置所使用的内存,否则可能因为内存不足导致分析过程超慢。3)兼..._c++test和fortify

好用到爆的 Java 小技巧-程序员宅基地

文章浏览阅读106次。本文不是一个吹嘘的文章,不会讲很多高深的架构,相反,会讲解很多基础的问题和写法问题,如果读者自认为基础问题和写法问题都是不是问题,那请忽略这篇文章,节省出时间去做一些有意义的事情。开发工具不知道有多少 “老” 程序员还在使用 Eclipse,这些程序员们要不就是因循守旧,要不就是根本就不知道其他好的开发工具的存在,Eclipse 吃内存卡顿的现象,以及各种偶然莫名异常的出现,都告知我们是时候寻找新..._java好用的小技巧

关于dvwa万能密码的问题解决_万能密码登录dvwa-程序员宅基地

文章浏览阅读1.5k次,点赞3次,收藏3次。关于dvwa万能密码的问题解决1、Brute Force下的结果及原因1.1、结果图一图二1.2、原因在Brute Force源码中用红笔括号起来的代码表示从数据库中得到的结果只有一条才符合条件而在数据库中查询图一中的username有不止一条结果符合,查询到超过一条结果,所以图一错误在数据库中查询图二中的username只有一条结果符合,所以图二正确2、login.php登录界面的结果及原因2.1、结果2.2、原因在login.php源码中用红笔括号起来的代码表示从数据库中_万能密码登录dvwa