为实现无人机实时监控自动巡检,准备把图传数据通过电脑发送到服务器用到的工具 Nginx+Ffmpeg
一、本地安装ffmpeg
这里我测试的是在本地笔记本电脑Win10系统
下载FFMPEG
解压到D盘,修改环境变量
计算机右键->属性->高级系统设置
添加环境变量后确定
Win+R cmd 查看测试
二、ffmpeg基本操作
1. 列出直播输入设备的示例:查看摄像头名称、麦克风名称
ffmpeg -list_devices true -f dshow -i dummy
2. 使用dshow设备作为输入的示例:
ffmpeg -f dshow -i video=“摄像头名称” out.mp4
这里我的摄像有名称是"HD Webcam"麦克风名称是"麦克风 (Realtek High Definition Audio)"
3. 使用音频和视频dshow设备作为输入的示例:
ffmpeg -f dshow -i video="HD Webcam":audio="麦克风 (Realtek High Definition Audio)" out.mp4
注意空格位置不要自己添加,如下报错
[dshow @ 000001848accc800] Malformed dshow input string.
video: I/O error
4.您还可以传递设备所需的某些参数
例如,网络摄像头可能允许您以最高5 fps的速率以1024x768捕获设备,或者允许您以30 fps的速率以640x480捕获设备。打印所选设备的选项列表的示例:
ffmpeg -f dshow -list_options true -i video="HD Webcam"
```![在这里插入图片描述](https://img-blog.csdnimg.cn/20200629162825821.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjEwMzk4,size_16,color_FFFFFF,t_70)
输出测试pixel_format yuyv422:
```bash
ffmpeg -f dshow -video_size 640x480 -framerate 30 -pixel_format yuyv422 -i video="HD Webcam" out.avi
输出测试vcodec mjpeg:
ffmpeg -f dshow -video_size 1280x720 -framerate 30 -vcodec mjpeg -i video="HD Webcam" out.avi
5.本地推流(注意需要部署Nginx为前提)
ffmpeg -f dshow -i video="HD Webcam" -vcodec libx264 -f flv rtmp://127.0.0.1:1935/live/home
VLC打开网络媒体rtmp:// 127.0.0.1:1935/live/home
127.0.0.1是本地nginx部署的服务,推流到服务器改IP即可
三、Nginx服务安装
1.下载 nginx
地址
下载完成后解压, 将解压后的目录命名为nginx
2.下载服务器状态检查程序
nginx-rtmp-module
3. 配置 conf\nginx-win-rtmp.conf
在文件添加这块代码
rtmp {
server {
listen 1935;
chunk_size 4000;
application live {
live on;
# record first 1K of stream
record all;
record_path /tmp/av;
record_max_size 1K;
# append current timestamp to each flv
record_unique on;
deny publish all;
}
}
}
双击启动即可
4.查看nginx是否部署完成
四、推流到服务器
1.视频文件推流测试
ffmpeg -re -i 1.mp4 -vcodec libx264 -acodec copy -preset:v ultrafast -tune:v zerolatency -f flv rtmp://47.115.178.208:1935/live/home
-i :这个参数表示输入 ,后面/home/lee/video.mp4 就是输入文件。
-vcodec copy : -vcodec表示使用的视频编解码器 ,前缀v表示video。后面紧跟的copy 表示复制使用源文件的视频编解码器,比如原文件的编解码器(codec)是h264,则这里就使用h264。
-acodec copy : -acodec表示使用的音频编解码器,前缀a表示audio。后面的copy 表示使用源文件的音频编解码器。
-b:v 800k : -b:v表示视频的比特率(bitrate) ,为800k。
-b:a 32k : 表示音频的比特率为32k。
-f flv : -f表示format ,就是强制输出格式为flv,这一步其实也叫封装(mux),封装要做的事就是把视频和音频混合在一起,进行同步。紧跟在后面的rtmp://localhost/videotest
表示输出的"文件名",这个文件名可以是一个本地的文件,也可以指定为rtmp流媒体地址。指定为rtmp流媒体地址后,则ffmpeg就可以进行推流
2.完整视频推流命令
ffmpeg -f dshow -video_size 640x480 -framerate 10 -vcodec mjpeg -i video="USB2.0 PC CAMERA" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://47.115.178.208:1935/live/home