当前位置: 首页 > news >正文

ubuntu中使用ffmpeg和nginx推流rtmp视频

最近在测试ffmpeg推流rtmp视频,单独安装ffmpeg是无法完成推流的,需要一个流媒体服务器,常用nginx,可以直接在ubuntu虚拟机里面测试一下。

测试过程不涉及编译ffmpeg和nginx,仅使用基本功能:

1 安装ffmpeg

sudo apt install ffmpeg

2 安装nginx

sudo apt install nginx

3 安装nginx的rtmp模块

sudo apt-get install libnginx-mod-rtmpsudo service nginx restart

4 配置nginx:

vim /etc/nginx/nginx.conf

 增加如下内容:

rtmp {server {listen 1935;chunk_size 4096;application live {live on;record off;}}
}

这个内容的意思是监听1935端口,rtmp的app名字为live,本地的一个流媒体服务器就搭好了。

5 经过上面的步骤各项准备工作都做好了,现在我想推流ubuntu本地的一个MP4文件到刚才的流媒体服务器(其实理论上只要是能访问上面的流媒体服务器的设备都可以推流到服务器,不一定是本地,我也可以在win10上面推进去ubuntu,再从win10拉出来),且一直循环推送,键入如下命令:

ffmpeg -stream_loop -1 -re -i /mnt/hgfs/vmware_ubuntu_share/input.mp4 -c copy -f flv -flvflags no_duration_filesize  rtmp:192.168.63.128:1935/live/1

这个命令的意思是:

-stream_loop -1 循环推送

-re 使用视频原来的帧率

-i /mnt/hgfs/vmware_ubuntu_share/input.mp4 要推送的mp4文件路径

-flvflags no_duration_filesize 禁止no_duration_filesize错误

192.168.63.128 ip地址改为自己的ubuntu地址,即流媒体服务器地址

推送成功如图。

6 在win10桌面打开ffplay从流媒体服务器拉流看看

ffplay rtmp:192.168.63.128:1935/live/1

 

拉流也是成功的。 

7 推送摄像头的画面到rtmp

命令:

ffmpeg -re -f video4linux2 -i /dev/video0 -vcodec libx264 -preset ultrafast  -tune zerolatency -acodec aac -f flv rtmp://192.168.63.128:1935/live/1

总体命令跟前面推送本地mp4差不多,只不过这次制定了输入为/dev/video0和输入的格式。

同样从ffplay拉流:

ffplay rtmp://192.168.63.128:1935/live/1

简单调试了一下画面,摄像头分辨率太高,导致码率很大,而且帧率很低:

ffmpeg -re -f video4linux2 -i /dev/video0 -vcodec libx264 -preset ultrafast  -tune zerolatency -acodec aac -crf 40  -vf "scale=1280:720,fps=fps=60"  -f flv rtmp://192.168.63.128:1935/live/1

-crf 40 可以显著降低画面质量,降低码率

-vf "scale=1280:720,fps=fps=60" 降低分辨率到720p,提高帧率到60

最后码率可以降低到200kbps左右,效果还可以,当然画面比较糊。

 

引用:

ubuntu20.04搭建Nginx+rtmp服务器 - 晚安z - 博客园 (cnblogs.com)

unknown directive "rtmp" in /etc/nginx/nginx.conf:76 - Stack Overflow

使用ffmpeg循环推流(循环读取视频文件)推送RTMP服务器的方法_windows ffmpeg循环推流-CSDN博客

ffmpeg推流报错Failed to update header with correct duration.-CSDN博客

http://www.lryc.cn/news/491022.html

相关文章:

  • strongswan测试流程
  • [CKS] CIS基准测试,修复kubelet和etcd不安全项
  • Linux/Windows/OSX 上面应用程序重新启动运行。
  • React拆分组件中的传值问题
  • RocketMQ的使⽤
  • Android Studio 设置不显示 build-tool 无法下载
  • 【Y20030007】基于java+servlet+mysql的垃圾分类网站的设计与实现(附源码 配置 文档)
  • 细说敏捷:敏捷四会之standup meeting
  • ThinkPHP8使用workerman
  • C语言超详细教程
  • [开源]3K+ star!微软Office的平替工具,跨平台,超赞!
  • 如何借助计算机视觉算法通过识别水尺精准识别水位
  • C++(进阶) 第1章 继承
  • 获国家权威机构认可 亚信安全荣获CNVD技术组支撑单位认证
  • 2. Autogen官网教程 (Terminating Conversations Between Agents)
  • java 排序 详解
  • 【数据集】城市通量塔站点观测数据
  • scau编译原理综合性实验
  • ETAS工具导入DBC生成Com协议栈
  • 表单校验规则
  • 接口的扩展
  • 新能源电机轴承电腐蚀,如何破?
  • Java中的File和IO流
  • ls命令实操笔记
  • 线段数--算法
  • JS的DOM操作和事件监听综合练习 (具备三种功能的轮播图案例)
  • 低温存储开关机问题
  • mysql系列1—mysql架构和协议介绍
  • 设计模式——模板模式
  • CV22_语义分割基础