热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用ffmpegnginxrtmp搭建实时流处理平台

环境:ubuntu16.04问题引入:使用opencv获取摄像头数据帧,进行处理之后(如进行keypoint识别),将opencv中图像的Mat类型转化为ffmpeg的AvPict

1182370-20180824154723733-325084891.png

环境: ubuntu 16.04
问题引入:

使用 opencv 获取摄像头数据帧, 进行处理之后(如进行 keypoint 识别), 将 opencv 中图像的 Mat类型转化为 ffmpeg 的 AvPicture 格式, 然后推送到流媒体服务器上, 本地通过 VLC 播放器查看实时检测效果

ffmpeg

sudo apt-get install ffmpeg -y

然后 /etc/ffserver.conf 配置外部可接入地址 在文件的 部分添加

BindAddress 0.0.0.0
ACL allow 127.0.0.1
ACL allow localhost
# 假设你的网络地址段为 `192.168.x.x`
ACL allow 192.168.0.0 192.168.255.255

然后 ffserver 开启服务器

ffserver -d -f /etc/ffserver.conf

使用 ffmpeg 查看可用视频和音频设备

通用: 通过 ffmpeg -devices 查看可用设备类型

linux 查看可用设备

ffmpeg -f v4l2 -list_devices true -i ""
ls -l /dev/video*

macOS 查看可用设备 ffmpeg -f avfoundation -list_devices true -i ""

ffmpeg 基本操作

转播

ffmpeg -i rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov -vcodec libx264 -acodec libvo_aacenc -f rtsp rtsp://9.123.143.116:8090/live.sdp

摄像头直播

ffmpeg -f video4linux2 -framerate 25 -video_size 640x480 -i /dev/video0 -vcodec libx264 -preset ultrafast -acodec libfaac -f flv rtmp://10.210.107.141/live

本地文件播放

ffmpeg -re -i smurf.flv -vcodec copy -acodec copy -f flv -y rtmp://9.123.143.116/live

搭建 rtsp 服务器

github 上有现成的开源的封装好的 rtsp 服务器工具, 这里使用 EasyDarwin

git clone https://github.com/EasyDarwin/EasyDarwin

修改配置文件 cfg.js, 将 rtsp_tcp_port 端口修改为与 /etc/ffserver.conf 中 HTTPPort 相同 (不知道什么原理)

// cfg.js
module.exports = {http_port: 10090,# I change 554 to 8090 to map /etc/ffserver.conf http portrtsp_tcp_port: 8090,defaultPwd: '123456',rootDir: __dirname,wwwDir: path.resolve(__dirname, "www"),dataDir: path.resolve(os.homedir(), ".easydarwin")
}

# /etc/ffserver.conf# Port on which the server is listening. You must select a different
# port from your standard HTTP web server if it is running on the same
# computer.HTTPPort 8090

Linux 平台, 执行 start.sh 运行服务执行 stop.sh 停止服务

一定要将 cfg.js 中的 rtsp_tcp_port 端口号设置与与 /etc/ffserver.conf HTTPPort端口号相同

测试代码

ffmpeg -i rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov -strict -2 -rtsp_transport tcp -vcodec h264 -f rtsp rtsp://9.123.143.116:8090/live/

ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 -strict -2 -vcodec libx264 -acodec libvo_aacenc -f rtsp rtsp://9.123.143.116:8090/live/

搭建 rtmp 服务器

这里是采用比较常用的 nginx 来搭建rtmp 服务器

环境: nginx-1.8.1 + nginx-rtmp-module

nginx服务器的搭建

1.安装依赖

sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev
sudo apt-get install openssl libssl-dev

2.下载 nginx-rtmp-module 与 nginx-1.8.1

git clone https://github.com/arut/nginx-rtmp-module.git
wget http://nginx.org/download/nginx-1.8.1.tar.gz
tar -zxvf nginx-1.8.1.tar.gz

3.配置并编译 nginx

进入到 nginx-1.8.1 安装目录, 使用 nginx 的默认配置,添加 nginx 的 rtmp 模块。 add-module 为下载的 nginx-rtmp-module 文件路径。

cd nginx-1.8.1
./configure --add-module=../nginx-rtmp-module
make
sudo make install

4.运行测试 nginx

进入安装目录 /usr/local/nginx,运行命令 ./sbin/nginx

注意:以后所有的命令都在/usr/local/nginx目录运行,也nginx配置文件的相对目录。

cd /usr/local/nginx
./sbin/nginx

打开浏览器在地址栏输入:localhost。如果,如下图显示那样就证明您的nginx服务器搭建成功了。

1182370-20180510150925885-978053506.jpg

nginx config

步骤如下

  1. 修改 nginx.conf 文件
  2. 重启 nginx 服务
  3. 修改 /etc/hosts, 添加本机地址对应的域名, 如 "9.123.143.116 nowgood"
  4. 打开浏览器查看效果, 注意网址为 http://localhost/stat

sudo vim /usr/local/nginx/conf/nginx.conf

sudo ./sbin/nginx -s reload

#/usr/local/nginx/conf/nginx.conf
#注明:请勿直接覆盖原来的conf文件,这只是部分有关直播的内容
#配置RTMP,这个配置格式在github的readme上有详细说明worker_processes 1;
events {worker_connections 1024;
}
rtmp { server {listen 1935; #服务端口--默认chunk_size 4096; #数据传输块的大小--默认#设置直播的application名称是 liveapplication live{ live on; #live on表示开启直播模式}#设置推流的应用名称application push{ live on; #开启直播push rtmp://rtmp-postbird/live; #推流到上面的直播应用}}
}http{include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80; # 端口server_name nowgood; #设置http服务器监听的域名 hosts中配置了#下面两个是加上去的,用来配置直播的http访问location /stat { rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}location /stat.xsl {#注意这里的路径不能错误,直接写绝对路径就可以root /home/gbsaa/wangbin/nginx-rtmp-module/;}location / {root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}

1182370-20180510150925905-1084751926.jpg

测试代码

ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 -strict -2 -vcodec libx264 -acodec libvo_aacenc -f flv rtmp://nowgood/live/webcam

ffmpeg -i rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov -strict -2 -vcodec libx264 -acodec libvo_aacenc -f flv rtmp://nowgood/live

推流

这里借用 jkuri 大兄弟的代码, 不过不使用他的用 docker 搭建的 nginx-rtmp 的服务器(我没有运行成功, 不过很有借鉴意义)

git clone https://github.com/jkuri/opencv-ffmpeg-rtmp-stream

将代码中的推流地址改为之前我们搭建的 rtmp 服务器的地址后, 使用功能 cmake 编译运行, 就可以将摄像头采集图像进行直播了

一些可能需要安装的依赖

sudo apt-get install v4l-utils
v4l2-ctl -d /dev/video0 --list-formats

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install libavcodec-extra

参考

https://github.com/opencv-ffmpeg-rtmp-stream
http://www.ptbird.cn/nginx-rtmp-module-server.html
https://zhuanlan.zhihu.com/p/28009037

转:https://www.cnblogs.com/nowgood/p/ffmpegnginx.html



推荐阅读
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一,尤其是在大规模系统中,数据库集群已经成为必备的配置之一。文章详细介绍了主从数据库架构的好处和实验环境的搭建方法,包括主数据库的配置文件修改和设置需要同步的数据库等内容。MySQL的主从复制功能在国内外大型网站架构体系中被广泛采用,本文总结了作者在实际的Web项目中的实践经验。 ... [详细]
  • 本文讨论了在使用PHP cURL发送POST请求时,请求体在node.js中没有定义的问题。作者尝试了多种解决方案,但仍然无法解决该问题。同时提供了当前PHP代码示例。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 树莓派Linux基础(一):查看文件系统的命令行操作
    本文介绍了在树莓派上通过SSH服务使用命令行查看文件系统的操作,包括cd命令用于变更目录、pwd命令用于显示当前目录位置、ls命令用于显示文件和目录列表。详细讲解了这些命令的使用方法和注意事项。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
author-avatar
121lzg
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有