Python 通过ffmpeg实现实时推流(ubuntu20.04+ffmpeg+nginx)

Posted 东洋 Dongyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 通过ffmpeg实现实时推流(ubuntu20.04+ffmpeg+nginx)相关的知识,希望对你有一定的参考价值。

目录

一. 基本概念及原理

1.1 ffmpeg简介

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。

1.2 RTMP简介

RTMP协议,又称实时消息传输协议(Real Time Messaging Protocol),该协议基于TCP,是一个协议族行,用于实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信,属于应用层

1.3 OBS-studio简介

Open Broadcaster Software是一个免费的开源的视频录制和视频实时流软件。其有多种功能并广泛使用在视频采集,直播等领域。

1.4 VLC

VLC Media Player(VLC多媒体播放器),融合了FFmpeg计划的解码器与libdvdcss程序库, 是VideoLAN计划的多媒体播放器。

二. 前期准备

服务器操作系统:ubuntu 20.04

nginx版本:nginx-1.18.0.tar.gz

RTMP模块:nginx-rtmp-module

推流工具:OBS-Studio/VLC

拉流工具:VLC

2.1 安装依赖

sudo apt install gcc make pcre pcre-devel openssl openssl-devel

此时可能出现报错:

E: Unable to locate package pcre
E: Unable to locate package pcre-devel
E: Unable to locate package openssl-devel

这个暂时先不用管。可以看到至少 sudo apt-get install openssl这个还是成功了的。

2.2 下载nginx-1.18.0.tar.gz和nginx-rtmp-module

wget https://nginx.org/download/nginx-1.18.0.tar.gz
tar -zxvf nginx-1.18.0.tar.gz #解压
git clone https://github.com/arut/nginx-rtmp-module

2.3 配置和编译安装

#nginx源码文件夹和rtmp模块源码文件夹在同一目录下
cd nginx-1.18.0
./configure --prefix=/usr/local/nginx  --add-module=../nginx-rtmp-module  --with-http_ssl_module
sudo make
sudo make install

可能会出现报错:

./configure: error: SSL modules require the OpenSSL library

解决办法:

sudo apt-get install libssl-dev

再次执行:

./configure --prefix=/usr/local/nginx  --add-module=../nginx-rtmp-module  --with-http_ssl_module
sudo make
sudo make install

2.4 查看安装结果

以下命令查看安装结果,出现版本号则证明成功:

 /usr/local/nginx/sbin/nginx -v
 #输出nginx version: nginx/1.18.0即为安装成功

2.5 设置Nginx开机启动

2.5.1 创建Nginx服务文件

cd /usr/lib/systemd/
mkdir && cd system
touch nginx.service
sudo vim /usr/lib/systemd/system/nginx.service

输入以下内容:

[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop

[Install]
WantedBy=multi-user.target

2.5.2 启动Nginx服务

sudo systemctl start nginx 
sudo systemctl enable nginx 

2.6 修改Nginx的配置文件

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

阿里云安全组增加8080端口的配置:

2.7 测试nginx服务

重启nginx:

 sudo systemctl restart nginx   

浏览器输入云服务器公网IP,出现下图所示欢迎语句表明配置成功:

四. 参考文献

阿里云服务器搭建Nginx+rtmp推流服务器

如何通过ffmpeg 实现实时推流和拉流保存的功能

FFMPEG是特别强大的专门用于处理音视频的开源库,既可以使用它的API对音视频进行处理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,来编辑你的音视频文件。

我们在开发TSINGSEE青犀视频产品过程中也会采用FFMPEG来对现有的系统进行简单的编译及调整,比如TSINGSEE青犀视频通道FFmpeg获取视频片段。本文将简要介绍一下 FFMPEG 库的基本目录结构及其功能,然后详细介绍一下我们在日常工作中,如何使用 ffmpeg 提供的工具来处理音视频文件。

ffmpeg通过 -i 选项读取任意数量的输入“文件”(可以是常规音视频文件,网络流,抓取设备等,并写入任意数量的输出“文件”。

原则上,每个输入/输出“文件”都可以包含任意数量的不同类型的视频流(视频/音频/字幕/附件/数据)。 流的数量和/或类型是由容器格式来限制。 选择从哪个输入进入到哪个输出将自动完成或使用 -map 选项。

要引用选项中的输入文件,您必须使用它们的索引(从 0 开始)。 例如。 第一个输入文件是 0,第二个输入文件是 1,等等。类似地,文件内的流被它们的索引引用。 例如 2:3 是指第三个输入文件中的第四个流。

上面就是 FFMPEG 处理音视频的常用命令,下面是一些常用参数:

拉流保存命令:

ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
该命令就是将rtmp://server/live/streamName视频流保存为dump.flv文件

实时推流命令

ffmpeg -framerate 15 -f avfoundation -i “1” -s 1280x720 -c:v libx264 -f flv rtmp://localhost:1935/live/room

该命令就是将源文件作为1280x720并且作为264编码推到 rtmp://localhost:1935/live/room地址上进行直播。

在部分常见的应用场景中,由于ffmpeg的领先性、包容性,并且还具有高度的便携性,很多客户都会使用ffmpeg来进行视频的处理,通过ffmpeg推流到视频服务器,如果大家对ffmpeg推流比较感兴趣,也可以和我们交流。TSINGSEE
青犀视频各视频平台均欢迎大家免费下载测试。

以上是关于Python 通过ffmpeg实现实时推流(ubuntu20.04+ffmpeg+nginx)的主要内容,如果未能解决你的问题,请参考以下文章

实战小项目之ffmpeg推流yolo视频实时检测

如何通过python实现H.264视频推流与接收

FFmpeg 代码实现流媒体推流(RTSP)

用ffmpeg录制小程序直播开发高清视频并实现直播推流

C++编程FFMpeg实时美颜直播推流实战-基于ffmpeg,qt5,opencv高清完整资源

FFmpeg 代码实现流媒体推流(RTSP)