自定义实现如下场景:
无人机A搭载高清相机巡查,将视频实时传送到云端(腾讯云)B1,地面工作C从云端B1获取视视频并实时处理,将目标检测出来做好标记(打上框),将处理后的视频流推送到云端B2,客户从B2拉流观看处理后的结果。
Step1.首先准备无人机(大疆精灵),腾讯云两套对应推流和拉流地址:T1(推流1)和 L1(拉流1),T2(推流2)和L2(拉流2)。
Step2.在无人机中设置推流地址T1,用L1测试成功与否。
step3.地面linux服务器C要从L1拉流获取数据,逐帧处理或抽帧处理,处理完用fmpeg推送到T2。展开来说:
1>python 中调用opencv读取rtmp视频流
cap = cv2.VideoCapture(rtmp_url)
2>使用nginx推流服务器,在配置文件中设置推流地址T2
vim /usr/local/nginx/conf/nginx.conf
user thsw2; #换成服务器主机名
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
rtmp
{
server
{
listen 1935;
chunk_size 4096;
application live
{
live on;
# 本地保存live格式文件,也可以注释掉,不保存视屏
recorder rec1{
record all;
record_unique on;
record_path /home/XXXX/data/video_live_bak;
record_suffix -%Y-%m-%d-%H_%M_%S.flv;
}
# 转推腾讯云T2
push rtmp://demopush.yunhengzhizao.cn/live/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;
}
}
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8081;
location /stat{
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl{
root /home/XX/module/nginx-rtmp-module-master;#自己的地址
}
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
step4:采用python 调用ffmepg推流
command=['ffmpeg',
'-y',
'-f', 'rawvideo',
'-vcodec','rawvideo',
'-pix_fmt', 'bgr24',
'-s', "{}x{}".format(OutVideoW,OutVideoH),# 图片分辨率
'-r', str(OutVideoFps),# 视频帧率
'-i', '-',
#'-c:v', 'libx264',
'-pix_fmt', 'yuv420p',
#'-preset', 'ultrafast',
'-f', 'flv',
rtmpUrl]
这一步可以参考网上ffmepg推流方法。
step6.在拉流地址L2上获取视频,约有10+秒的延时,待解决。