当前位置: 首页 > 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.mrgr.cn/news/77995.html

相关文章:

  • 概率论与数理统计总复习
  • ue5 按下ctrl,角色蹲下/解除蹲下。添加角色蹲伏动画。动画蓝图和状态机,状态,状态别名
  • Linux-中断上下文底半部机制
  • 纯手工(不基于maven的pom.xml、Web容器)连接MySQL数据库的详细过程(Java Web学习笔记)
  • 【C++多线程编程:六种锁】
  • 环动科技平均售价波动下滑:大客户依赖明显,应收账款周转率骤降
  • RFdiffusion sample_vec函数解读
  • PAL(Program-Aided Language Model)
  • AGCR自适应杂波滤除算法for GPR
  • Image fusion meets deep learning: A survey and perspective译文
  • 【电路设计】基于CD4511的八路抢答器电路解析
  • 鸿蒙主流路由详解
  • FreeRTOS——软件定时器
  • 设计模式之创建模式篇
  • vue3项目部署在阿里云轻量应用服务器上
  • goframe开发一个企业网站 MongoDB 完整工具包18
  • 类和对象--中--运算符重载、日期类实现(重要)
  • 09 —— Webpack搭建开发环境
  • 【前端】JavaScript 作用域全面解析
  • 编程中的快捷操作
  • 运维Tips:Docker或K8s集群拉取Harbor私有容器镜像仓库配置指南
  • .net core MVC入门(一)
  • 三汇&网易|认知实习报告
  • 【CSP CCF记录】201812-2第15次认证 小明放学
  • 华为昇腾 acl_pytorch
  • Node教程和实战