1156浏览
查看: 1156|回复: 1

[项目] 【智控万物】树莓派直播

[复制链接]
SatJanuary-202101305851..png


【重装系统】为保证能顺利在树莓派搭建rtmp服务器,我重装了树莓派系统。我选择的是Raspberry Pi OS(Raspbian),树莓派官方深度定制的硬件驱动与软件程序,官方推荐系统。
分为以下三步:
1、树莓派资源下载https://shumeipai.nxez.com/download
2、Windowns 下安装树莓派系统到SD卡https://shumeipai.nxez.com/2013/09/07/raspberry-pi-under-windows-system-installation-to-sd-card.html
3、首次使用树莓派,如何安装、启动及配置
https://shumeipai.nxez.com/2013/09/07/how-to-install-and-activate-raspberry-pi.html
【rtmp服务器】
树莓派搭建rtmp服务器使用ffmpeg推流
https://blog.csdn.net/weixin_42454034/article/details/108437538

其中“ mv nginx-rtmp-module/ /usr/local/nginx-1.18.0/”,仍要加上“sudo”
【附加学习】
我同时学习了VIM的使用:
https://blog.csdn.net/LOVE_Me__/article/details/113246873
【开启nginx服务sudo /usr/local/nginx/sbin/nginx

SatJanuary-202101305975..png

ffmpeg -re -i /dev/video0  -f flv rtmp://192.168.31.100/live/ch1
ip地址改成自己树莓派的ip.
SatJanuary-202101305397..png
【电脑端查看】
python 程序
  1. def main():
  2.   import cv2
  3.   cap = cv2.VideoCapture('rtmp://192.168.31.100:1935/live/ch1')
  4.   #cap = cv2.VideoCapture(1)
  5.   while(1):    # get a frame and show   
  6.     ret, frame = cap.read()
  7.     if(ret):
  8.        cv2.imshow('Capture', frame)    # change to hsv model   
  9.     if cv2.waitKey(1) & 0xFF == ord('q'):
  10.        break
  11. cv2.destroyAllWindows()
  12. if __name__=='__main__':
  13.       main()
复制代码
SatJanuary-202101304954..png 有大概2秒多的延迟。

能获取到画面,就能做很多事情。

SatJanuary-202101302527..png

SatJanuary-202101301889..png

SatJanuary-202101309330..png
如从树莓派获取的画面中,识别人脸。

  1. def main():
  2.   import cv2
  3.   cap = cv2.VideoCapture('rtmp://192.168.31.100:1935/live/ch1')
  4.   #cap = cv2.VideoCapture(1)
  5.   face_cascade = cv2.CascadeClassifier(r'C:/Users/zlzx/Documents/mindplus-py/environment/Python3.6.5-64/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
  6.   while(1): # get a frame and show
  7.     ret, frame = cap.read()
  8.     if(ret):
  9.       faces = face_cascade.detectMultiScale(frame,scaleFactor = 1.15,minNeighbors = 5,minSize = (5,5))
  10.       for(x,y,w,h) in faces:
  11.          cv2.rectangle(frame,(x,y),(x+w,y+w),(0,255,0),2)
  12.       if len(faces)>0:
  13.                pass
  14.                #做自己的事
  15.       cv2.imshow('Capture', frame) # change to hsv model
  16.     if cv2.waitKey(1) & 0xFF == ord('q'):
  17.       break
  18.   cv2.destroyAllWindows()
  19. if __name__=='__main__':
  20.       main()
复制代码

【直播平台】
直播平台,设置。我使用“斗鱼”。
在OBS直播中找到rmtp地址和直播码。 SatJanuary-202101307556..png
平台直播最后没有成功。

ffmpeg -re -i "(树莓派中你的视频地址)" -vcodec copy -acodec aac -b:a 192k -f flv "rtmp://dl.live-send.acg.tv/live-dl/你的直播码"
ffmpeg -re -i /dev/video0  -vcodec copy    -an -b:v 800k -f flv rtmp://192.168.31.148/live/3C52820DF8C4

FFmpeg 推流:flv直播流
ffmpeg -re -i 1.mp4 -vcodec copy -acodec copy -b:v 800k -b:a 32k -f flv rtmp://localhost/live

  • localhost, 本机,可以设置ip地址或者域名
    修改视频播放速度
    ffmpeg -i input.mp4 -vf “setpts=0.5*PTS” output.mp4
    该命令调整视频2倍速播放,然后输出。

$ ffmpeg -i input.mp4 -vf “setpts=4.0*PTS” output.mp4
减小视频播放速度。 乘以一个参数大于1的数。
FFMPEG常用参数说明
主要参数:
-i 设定输入流
-f 设定输出格式
-ss 开始时间
-formats 查看所有支持的容器格式
-codecs 查看所有编解码器
-filters 查看所有可用的filter
-pix_fmts 查看所有支持的图片格式
-sample_fmts 查看所有支持的像素格式
-i input_file 查看媒体文件input_file的信息(注意后面不再接其它参数,例如: ffmpeg -i test.mp4,查看 test.mp4视频信息)

视频参数:
-b 设定视频流量,默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器

音频参数:
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频


在树莓派中的终端中使用如下命令,出现错误,转码格式不匹配。
ffmpeg -re -i /dev/video0  -vcodec mpeg4    -an -b:v 800k -f flv rtmp://192.168.31.148/live/3C52820DF8C4
SatJanuary-202101305674..png

使用参数-vcodec libx264
ffmpeg -re -i /dev/video0   -vcodec libx264    -f flv rtmp://192.168.31.148/live/3C52820DF8C4
SatJanuary-202101301781..png
推流正常

斗鱼平台OBS直播也显示正常
但直播间显示为黑屏。

中间不使用任何参数,直接推流。
ffmpeg -re -i /dev/video0  -f flv rtmp://192.168.31.148/live/3C52820DF8C4


SunJanuary-202101315323..png
SunJanuary-202101317915..png
一直显示为99%,不出画面。但预览图却可以看见当下一张画面。

暂时没有解决。

【花生壳映射】使用花生壳,将树莓派rtmp服务映射出去。
SatJanuary-202101303304..png

SatJanuary-202101303557..png

SatJanuary-202101305749..png



  1. def main():
  2.   import cv2
  3.   cap = cv2.VideoCapture('rtmp://306pa45330.wicp.vip:45405/live/ch1')
  4.   #cap = cv2.VideoCapture(1)
  5.   face_cascade = cv2.CascadeClassifier(r'C:/Users/zlzx/Documents/mindplus-py/environment/Python3.6.5-64/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
  6.   while(1): # get a frame and show
  7.     ret, frame = cap.read()
  8.     if(ret):
  9.       faces = face_cascade.detectMultiScale(frame,scaleFactor = 1.15,minNeighbors = 5,minSize = (5,5))
  10.       for(x,y,w,h) in faces:
  11.          cv2.rectangle(frame,(x,y),(x+w,y+w),(0,255,0),2)
  12.       if len(faces)>0:
  13.                pass
  14.                #做自己的事
  15.       cv2.imshow('Capture', frame) # change to hsv model
  16.     if cv2.waitKey(1) & 0xFF == ord('q'):
  17.       break
  18.   cv2.destroyAllWindows()
  19. if __name__=='__main__':
  20.       main()
复制代码


【端口转发】
因家用移动宽带使用的不是公网IP,所以使用端口转发无效。
SunJanuary-202101316886..png


pATAq  版主

发表于 2021-2-1 00:06:16

感谢分享,这个还要搞什么硬件加速吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail