| 
 【重装系统】为保证能顺利在树莓派搭建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
 
 
  
 ffmpeg -re -i /dev/video0  -f flv rtmp://192.168.31.100/live/ch1
 ip地址改成自己树莓派的ip.
 
  【电脑端查看】
 python 程序
 
 复制代码def main():
  import cv2
  cap = cv2.VideoCapture('rtmp://192.168.31.100:1935/live/ch1')
  #cap = cv2.VideoCapture(1)
  while(1):    # get a frame and show   
    ret, frame = cap.read()
    if(ret):
       cv2.imshow('Capture', frame)    # change to hsv model   
    if cv2.waitKey(1) & 0xFF == ord('q'):
       break
 cv2.destroyAllWindows()
if __name__=='__main__':
      main()
  有大概2秒多的延迟。 
 能获取到画面,就能做很多事情。
 
 
  
 
  
 
  如从树莓派获取的画面中,识别人脸。
 
 
 复制代码def main():
  import cv2
  cap = cv2.VideoCapture('rtmp://192.168.31.100:1935/live/ch1')
  #cap = cv2.VideoCapture(1)
  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')
  while(1): # get a frame and show 
    ret, frame = cap.read()
    if(ret):
      faces = face_cascade.detectMultiScale(frame,scaleFactor = 1.15,minNeighbors = 5,minSize = (5,5))
      for(x,y,w,h) in faces:
         cv2.rectangle(frame,(x,y),(x+w,y+w),(0,255,0),2)
      if len(faces)>0:
               pass
               #做自己的事
      cv2.imshow('Capture', frame) # change to hsv model 
    if cv2.waitKey(1) & 0xFF == ord('q'):
      break
  cv2.destroyAllWindows()
if __name__=='__main__':
      main()
 【直播平台】
 直播平台,设置。我使用“斗鱼”。
 在OBS直播中找到rmtp地址和直播码。
  (平台直播最后没有成功。)
 
 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
 
  
 使用参数-vcodec libx264
 ffmpeg -re -i /dev/video0   -vcodec libx264     -f flv rtmp://192.168.31.148/live/3C52820DF8C4
 
  推流正常
 
 斗鱼平台OBS直播也显示正常
 但直播间显示为黑屏。
 
 中间不使用任何参数,直接推流。
 ffmpeg -re -i /dev/video0  -f flv rtmp://192.168.31.148/live/3C52820DF8C4
 
 
  
  一直显示为99%,不出画面。但预览图却可以看见当下一张画面。
 
 暂时没有解决。
 
 【花生壳映射】使用花生壳,将树莓派rtmp服务映射出去。
 
  
 
  
 
  
 
 
 
 复制代码def main():
  import cv2
  cap = cv2.VideoCapture('rtmp://306pa45330.wicp.vip:45405/live/ch1')
  #cap = cv2.VideoCapture(1)
  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')
  while(1): # get a frame and show 
    ret, frame = cap.read()
    if(ret):
      faces = face_cascade.detectMultiScale(frame,scaleFactor = 1.15,minNeighbors = 5,minSize = (5,5))
      for(x,y,w,h) in faces:
         cv2.rectangle(frame,(x,y),(x+w,y+w),(0,255,0),2)
      if len(faces)>0:
               pass
               #做自己的事
      cv2.imshow('Capture', frame) # change to hsv model 
    if cv2.waitKey(1) & 0xFF == ord('q'):
      break
  cv2.destroyAllWindows()
if __name__=='__main__':
      main()
 
 【端口转发】
 因家用移动宽带使用的不是公网IP,所以使用端口转发无效。
 
  
 
 
 |