|
本帖最后由 Gohome_soon 于 2018-7-13 10:58 编辑
最近开始接触Python,才发现Python太好用了,正好手上有一个树莓派Zero W,正好也有一个摄像头,于是网上找资料把摄像头使用起来,做了个局域网络摄像头。
在之前需要做一些准备,请自行百度
1. 首先将树莓派Zero W usb设置为网卡模式(我没有使用自带的wifi模块,因为我传的是mjpeg,而不是h264,数据量较大,wifi传不过来,而传输h264,PC端播放卡顿,能力有限,不能解决)
2. 安装树莓派官方摄像头操作python库 picamera,
代码如下:
- #coding:utf-8
- """
- #coding:utf-8
- 允许后文出现 UFT-8 中文编码
- """
- import socket
- import time
- import picamera
- import threading
- class Video:
- """
- Initialize the video parameters.
- """
- def __init__(self):
- self.__width = 1920
- self.__height = 1080
- self.__framerate = 25
- self.__format = 'mjpeg'
- self.__port = 8000
- self.__socket_thread = ''
- """
- 树莓派以mjpeg格式录制视频,并直接将视频流通过TCP协议发送出去
- """
- def __sendbyStream(self, stop_event):
- with picamera.PiCamera() as camera:
- camera.resolution = (self.__width, self.__height)
- camera.framerate = self.__framerate
- server_socket = socket.socket()
- server_socket.bind(('0.0.0.0', self.__port))
- server_socket.listen(5)
-
- connection = server_socket.accept()[0].makefile('wb')
- while not stop_event.isSet():
- try:
- camera.start_recording(connection, format='mjpeg')
- camera.wait_recording(60)
- camera.stop_recording()
- except :
- break
- connection.close()
- server_socket.close()
-
-
- """
- Runs the read and write processes.
- """
- def run(self):
- self.__stop = threading.Event()
- self.__socket_thread = threading.Thread(target = self.__sendbyStream, args=(self.__stop,))
- self.__socket_thread.start()
- def close(self):
- self.__stop.set()
-
- def VideoStream2VlcPlay ():
- video = Video()
- video.run()
- while True:
- try:
- time.sleep(1)
- except KeyboardInterrupt:
- video.close()
- break
-
- if __name__ == "__main__":
- VideoStream2VlcPlay()
-
复制代码
PC端,我使用的是VLC播放器,播放网络串流数据
不过还有几个关于picamera操作摄像头的问题,没有搞懂,请教下:
1.如何使用picamera操作树莓派摄像头循环录制:
网上查找资料解释是:picamera将产生一个loop缓冲区,如果在缓冲区已满,则picamera会将最开头的视频替换掉,以保证在缓冲区的视频是最新的。
2.如何在mjpeg视频流中加入声音:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|