博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过FFmpeg将rtsp流摄像头视频转码为rtmp播放
阅读量:6771 次
发布时间:2019-06-26

本文共 2847 字,大约阅读时间需要 9 分钟。

注意:用这种方式可以显示摄像头视频,但是存在诸多问题,无法正常投入使用,包括卡顿跟延迟,请想要借鉴的朋友慎重使用。

       前几天经理给我安排了一个新任务,将网络摄像头用rtsp协议在页面播放,因为我以前做的是http协议的,根据摄像头的API来实现的,所以这一块根本不懂,看了前辈们写的博客,学习到了许多,在这里记录下来,以后用的时候还能看看。

目前需要用到技术有ffmpeg、nginx、rtsp以及rtmp协议,页面播放器VLC、flash、video.js都可以,在使用之前先对这些技术做一个大体的了解。
- RTSP
要知道什么是RTSP?
- RTMP
什么是RTMP?
- ffmpeg
什么是ffmpeg?
- nginx
什么是nginx?
ffmpeg的下载地址:
nginx的下载地址:
根据需要下载自己所需要的版本之后,接下来开始搭建服务器。

FFmpeg配置

将下载下来的ffmpeg的压缩文件解压,然后到C盘下面,新建一个文件夹,名称就是ffmpeg(在原来的路径也可以,只不过路径太麻烦了),然后将解压的文件全部复制到C://ffmpeg文件夹下面,然后右击我的电脑图标——选择属性,选择高级系统设置命令,然后在弹出的窗口中选择环境变量系统属性

在系统变量点击添加,新建一个Path变量,变量值为解压的根文件夹,然后打开bin,我的是在C盘下,所以就是:
这里写图片描述
然后点击确定,退出页面。
       按win+R打开命令行窗口,输入ffmpeg -version,查看是否安装成功,如果成功的话,显示下图。
这里写图片描述
步骤进行到这里,ffmpeg已经配置完成了。

Nginx

首先下载自己需要的版本,,将下载的文件解压到本地,然后再,nginx-rtmp-module-master,将此文件下载之后,解压放到上面的文件根目录下即可,下面是配置文件:

1、配置nginx文件,在conf文件夹里面有一个nginx-win.conf文件,将文件改名为nginx.conf(此处不改我也不知道可不可以,看到博客上这样写,我就改了),然后里面配置文件如下:

……rtmp{    server{    listen 1935;        application live{        live on;        record off;        }        application hls{        live on;        hls on;        hls_path nginx-rtmp-module/hls;        hls_cleanup off;        }    }}http{……}

原文中还有许多配置,但是我引用之后报错,不能够实现,所以我就讲其他的删除了,有需要的可以看一下原文这个地方的配置信息。

2、使用cmd命令启动nginx,在命令窗口进入之前解压的文件夹根目录,然后输入start nginx.exe,会弹出一个窗口,闪一下就关闭,如下所示
这里写图片描述
然后在任务管理器的进程管理中,可以看到nginx.exe正在运行,到此nginx搭建完毕。
这里写图片描述
3、在浏览器输入localhost或者127.0.0.1或者本机的IP地址,弹出如下页面表示搭建成功。
这里写图片描述


接下来要做的就是把rtsp流转换为rtmp流,可以在播放器中实时播放。

1、在cmd窗口中,打开nginx之后,输入命令ffmpeg -i “rtsp://admin:123456@192.168.2.165:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif” -vcodec copy -acodec copy -f flv “rtmp://[此处可以用localhost,可以用127.0.0.1,也可以用本机ip]:1935/live/”,之后显示如下界面表示转码成功:
这里写图片描述
2、转码成功之后,将转码之后的地址,我这里是rtmp://127.0.0.1:1935/live,放在vlc播放器中查看实时视频
这里写图片描述
3、使用ffplay命令也可以查看,在命令行输入ffplay “rtmp://127.0.0.1:1935/live”,就会看到实时视频。
4、如果要在页面中使用的话,需要进行推流处理,就是将rtmp流通过命令进行推流操作,通过本条命令(start ffmpeg -re -i “rtmp://localhost:1935/live” -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec copy -f flv “rtmp://localhost:1935/hls/mystream -loglevel quiet)可以将rtmp流视频推送到rtmp://localhost:1935/hls/mystream,这个地址后面的mystream可以随意写,但是要跟前面推流过程中写的一样;
5、页面中使用video.js来播放推送过来的rtmp视频,页面是要放到服务器中打开的,单独打开静态页面是没有用的。
摄像头视频
6、还有一种方法,不需要转码两次,直接将rtsp视频转码为可以在页面播放的rtmp流,命令行为(ffmpeg -re -i “rtsp://admin:123456@192.168.2.165:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif” -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec copy -f flv “rtmp://localhost:1935/hls/mystream”)或者(ffmpeg -i “rtsp://admin:123456@192.168.2.165:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif” -f flv -r 25 -s 640*480 -an “rtmp://localhost:1935/hls/mystream”),即可在页面使用rtmp://localhost:1935/hls/mystream来播放视频。
页面部分具体代码:

            

备注:用此方法虽然可以在页面播放,但是延迟有点大,使用java来执行ffmpeg命令在我的下一篇博客里面有记载,欢迎大家提意见一起讨论(QQ:1307329425)


借鉴的博文:

1、
2、
3、雷神博客
4、
5、

转载于:https://www.cnblogs.com/G1432291874/p/9346028.html

你可能感兴趣的文章
java垃圾回收算法(记录)
查看>>
samba配置
查看>>
批量修改Dell服务器远程管理卡iDRAC密码
查看>>
我的友情链接
查看>>
Debian/Ubuntu自有软件包构建私有源
查看>>
强大的vim编辑器
查看>>
Kafka pixy
查看>>
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
查看>>
Windows 7命令行映射网络驱动器
查看>>
AMR音频编码器概述及文件格式分析
查看>>
ORACLE的基本语法集锦
查看>>
centos下安装php环境
查看>>
Mybatis逆向工程的实现
查看>>
su和sudo用法学习整理
查看>>
4. 输入输出流体系结构
查看>>
基于LAMP 搭建PowerDNS
查看>>
关于android8.1实现多个app升级时的注意事项
查看>>
省市县三级联动
查看>>
【高德地图API】从零开始学高德JS API(三)覆盖物
查看>>
IOS的UIScrollView的自动布局
查看>>