搜索
bottom↓
回复: 15

树莓派上使用Python实现视频直播

[复制链接]

出0入0汤圆

发表于 2018-7-13 10:55:47 | 显示全部楼层 |阅读模式
本帖最后由 Gohome_soon 于 2018-7-13 10:58 编辑

最近开始接触Python,才发现Python太好用了,正好手上有一个树莓派Zero W,正好也有一个摄像头,于是网上找资料把摄像头使用起来,做了个局域网络摄像头。
在之前需要做一些准备,请自行百度
        1.        首先将树莓派Zero W usb设置为网卡模式(我没有使用自带的wifi模块,因为我传的是mjpeg,而不是h264,数据量较大,wifi传不过来,而传输h264,PC端播放卡顿,能力有限,不能解决)
        2.        安装树莓派官方摄像头操作python库 picamera,
代码如下:
  1. #coding:utf-8

  2. """
  3. #coding:utf-8
  4.     允许后文出现 UFT-8 中文编码
  5. """
  6. import socket
  7. import time
  8. import picamera
  9. import threading


  10. class Video:

  11.         """
  12.         Initialize the video parameters.
  13.         """
  14.         def __init__(self):
  15.                 self.__width = 1920
  16.                 self.__height = 1080
  17.                 self.__framerate = 25
  18.                 self.__format = 'mjpeg'
  19.                 self.__port = 8000
  20.                 self.__socket_thread = ''
  21.         """
  22.         树莓派以mjpeg格式录制视频,并直接将视频流通过TCP协议发送出去
  23.         """
  24.         def __sendbyStream(self, stop_event):
  25.                 with picamera.PiCamera() as camera:
  26.                     camera.resolution = (self.__width, self.__height)
  27.                     camera.framerate = self.__framerate
  28.                     server_socket = socket.socket()
  29.                     server_socket.bind(('0.0.0.0', self.__port))
  30.                     server_socket.listen(5)
  31.                     
  32.                     connection = server_socket.accept()[0].makefile('wb')                                      
  33.                     while not stop_event.isSet():
  34.                         try:
  35.                             camera.start_recording(connection, format='mjpeg')
  36.                             camera.wait_recording(60)
  37.                             camera.stop_recording()
  38.                         except :
  39.                             break
  40.                     connection.close()
  41.                     server_socket.close()
  42.            

  43.                                     
  44.         """
  45.         Runs the read and write processes.
  46.         """
  47.         def run(self):
  48.                 self.__stop = threading.Event()
  49.                 self.__socket_thread = threading.Thread(target = self.__sendbyStream, args=(self.__stop,))
  50.                 self.__socket_thread.start()

  51.         def close(self):
  52.                 self.__stop.set()
  53.                



  54. def VideoStream2VlcPlay ():
  55.     video = Video()
  56.     video.run()

  57.     while True:
  58.         try:
  59.             time.sleep(1)  
  60.         except KeyboardInterrupt:
  61.             video.close()
  62.             break
  63.             

  64. if __name__ == "__main__":
  65.     VideoStream2VlcPlay()

复制代码




PC端,我使用的是VLC播放器,播放网络串流数据



不过还有几个关于picamera操作摄像头的问题,没有搞懂,请教下:
       1.如何使用picamera操作树莓派摄像头循环录制:
                网上查找资料解释是:picamera将产生一个loop缓冲区,如果在缓冲区已满,则picamera会将最开头的视频替换掉,以保证在缓冲区的视频是最新的。
       2.如何在mjpeg视频流中加入声音:


        

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2018-7-13 11:43:30 | 显示全部楼层
牛,收藏一个,最近在做别的,等以后有时间了再看看

出0入0汤圆

发表于 2018-7-13 12:04:53 来自手机 | 显示全部楼层
习惯了花括号,这语法看着难受啊,不然也玩了

出0入0汤圆

发表于 2018-7-13 12:23:35 | 显示全部楼层
xfdr 发表于 2018-7-13 12:04
习惯了花括号,这语法看着难受啊,不然也玩了

其实你照c来写都可以的说,区别一点点而已

出0入0汤圆

发表于 2018-7-13 17:18:10 | 显示全部楼层
http://picamera.readthedocs.io/en/release-1.13/

这个lib里面有具体的做法的,就是你说的循环录制。
不过你要找一下,我已经忘记具体在哪里了

出0入0汤圆

 楼主| 发表于 2018-7-13 22:28:41 | 显示全部楼层
qiqirachel 发表于 2018-7-13 17:18
http://picamera.readthedocs.io/en/release-1.13/

这个lib里面有具体的做法的,就是你说的循环录制。

3Q,我看看,研究下,后面估计还的用C写

出0入0汤圆

发表于 2018-7-13 22:55:27 | 显示全部楼层
看着很别扭的语法,搞不懂为什么那么流行

出0入25汤圆

发表于 2018-7-13 23:25:46 | 显示全部楼层
Gohome_soon 发表于 2018-7-13 22:28
3Q,我看看,研究下,后面估计还的用C写

lz  python 你学的好溜。。

问下学哪本书的?

出0入0汤圆

发表于 2018-7-14 14:41:43 | 显示全部楼层
楼主用的是usb接口的摄像头吗,播放不不卡顿吗

出0入0汤圆

发表于 2018-7-14 14:44:37 | 显示全部楼层
楼主用的是usb接口的摄像头吗,播放不不卡顿吗

出0入0汤圆

发表于 2018-7-14 15:37:17 来自手机 | 显示全部楼层
坛里很多大神愿意分享,学习一下

出0入0汤圆

发表于 2018-7-14 18:48:31 来自手机 | 显示全部楼层
ziziy 发表于 2018-7-14 14:44
楼主用的是usb接口的摄像头吗,播放不不卡顿吗

官方摄像头官方库

出0入0汤圆

发表于 2018-7-14 19:11:07 | 显示全部楼层
qiqirachel 发表于 2018-7-14 18:48
官方摄像头官方库

那我也玩过一次,卡的要死,换个摄像头好一点,不过也卡。不知道楼主这怎么样

出0入0汤圆

发表于 2018-7-14 19:16:11 | 显示全部楼层
ziziy 发表于 2018-7-14 19:11
那我也玩过一次,卡的要死,换个摄像头好一点,不过也卡。不知道楼主这怎么样 ...

不是很清楚,不过我的一点也不卡啊,3b+ 和原装的夜视摄像头

出0入0汤圆

 楼主| 发表于 2018-7-15 21:36:31 | 显示全部楼层
ziziy 发表于 2018-7-14 14:41
楼主用的是usb接口的摄像头吗,播放不不卡顿吗


不是,是CSI接口的,传输H264确实卡顿,到但是传输Mjpeg很流畅,不过我是使用usb虚拟网卡传的,wifi估计传不赢,python是使用的官方picamera

出0入0汤圆

发表于 2018-7-15 22:50:19 来自手机 | 显示全部楼层
牛,先mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 07:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表