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