【重装系统】为保证能顺利在树莓派搭建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,所以使用端口转发无效。 
  
 
 
 |