python传输视频文件_Python视频传输
ubuntu16.04+python2+opencv
(一) 开发前的准备工作
sudo apt-get install python-pip
pip install numpy
pip install opencv-python
(二)开启摄像头,获取帧图片
#!usr/bin/python
# coding=utf-8
import cv2
import numpy
# 从摄像头采集图像
# 参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频
cap = cv2.VideoCapture(0)
while True:
# get a frame
# capture.read() 按帧读取视频
# ret,frame 是capture.read()方法的返回值
# 其中ret是布尔值,如果读取帧正确,返回True;如果文件读到末尾,返回False。
# frame 就是每一帧图像,是个三维矩阵
ret, frame = cap.read()
# show a frame
cv2.imshow("capture", frame)
# waitKey() 表示等待键盘输入
# 参数 1 ,表示延时1ms切换到下一帧图像,对视频而言
# 参数 0 ,表示只显示当前帧图像,相当于视频暂停
# 参数过大,会因延时过就而卡顿
# asc = cv2.waitKey(1)
# asc 键盘输入的ASCII码,esc键对应的ASCII码是27
# 它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值
asc = cv2.waitKey(1)
# print asc
if asc == ord('q'):
break
# 释放摄像头
cap.release()
# 关闭所有图像窗口
cv2.destroyAllWindows()
(三)视频传输
我是以传输图片的原理达到传输视频目的,也就是传输一张一张的图片。
分为客户端和服务端,既可以客户端采集视频传输到服务端显示,也可以服务端采集视频传输到客户端显示,这里只是初步应用。
服务端
1 #!/usr/bin/python
2 # -*-coding:utf-8 -*-
3 import socket
4 import cv2
5 import numpy
6
7
8 # 接受图片大小的信息
9 def recv_size(sock, count):
10 buf = ''
11 while count:
12 newbuf = sock.recv(count)
13 if not newbuf: return None
14 buf += newbuf
15 count -= len(newbuf)
16 return buf
17
18
19 # 接收图片
20 def recv_all(sock, count):
21 buf = ''
22 while count:
23 # 这里每次只接收一个字节的原因是增强python与C++的兼容性
24 # python可以发送任意的字符串,包括乱码,但C++发送的字符中不能包含'\0',也就是字符串结束标志位
25 newbuf = sock.recv(1)
26 if not newbuf: return None
27 buf += newbuf
28 count -= len(newbuf)
29 return buf
30
31 # socket.AF_INET 用于服务器与服务器之间的网络通信
32 # socket.SOCK_STREAM 代表基于TCP的流式socket通信
33
34 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
35
36 # 设置地址与端口,如果是接收任意ip对本服务器的连接,地址栏可空,但端口必须设置
37 address = ('10.0.0.30', 8010)
38 s.bind(address) # 将Socket(套接字)绑定到地址
39 s.listen(True) # 开始监听TCP传入连接
40 print ('Waiting for images...')
41 # 接受TCP链接并返回(conn, addr),其中conn是新的套接字对象,可以用来接收和发送数据,addr是链接客户端的地址。
42 conn, addr = s.accept()
43
44 while True:
45 length = recv_size(conn, 16) # 首先接收来自客户端发送的大小信息
46 if isinstance(length, str): # 若成功接收到大小信息,进一步再接收整张图片
47 stringData = recv_all(conn, int(length))
48 data = numpy.fromstring(stringData, dtype='uint8')
49 decimg = cv2.imdecode(data, 1) # 解码处理,返回mat图片
50 cv2.imshow('SERVER', decimg)
51 if cv2.waitKey(10) == 27:
52 break
53 print('Image recieved successfully!')
54 conn.send("Server has recieved messages!")
55 if cv2.waitKey(10) == 27:
56 break
57
58 s.close()
59 cv2.destroyAllWindows()
客户端
1 #!/usr/bin/python
2 # -*-coding:utf-8 -*-
3 import socket
4 import cv2
5 import numpy
6
7
8 # socket.AF_INET 用于服务器与服务器之间的网络通信
9 # socket.SOCK_STREAM 代表基于TCP的流式socket通信
10 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
11 # 连接服务端
12 address_server = ('10.0.0.30', 8010)
13 sock.connect(address_server)
14
15 # 从摄像头采集图像
16 # 参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频
17 capture = cv2.VideoCapture(0)
18 # capture.read() 按帧读取视频
19 # ret,frame 是capture.read()方法的返回值
20 # 其中ret是布尔值,如果读取帧正确,返回True;如果文件读到末尾,返回False。
21 # frame 就是每一帧图像,是个三维矩阵
22 ret, frame = capture.read()
23 encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 95]
24 while ret:
25 # 首先对图片进行编码,因为socket不支持直接发送图片
26 # '.jpg'表示把当前图片frame按照jpg格式编码
27 # result, img_encode = cv2.imencode('.jpg', frame)
28 img_encode = cv2.imencode('.jpg', frame, encode_param)[1]
29 data = numpy.array(img_encode)
30 stringData = data.tostring()
31 # 首先发送图片编码后的长度
32 sock.send(str(len(stringData)).ljust(16))
33 # 然后一个字节一个字节发送编码的内容
34 # 如果是python对python那么可以一次性发送,如果发给c++的server则必须分开发因为编码里面有字符串结束标志位,c++会截断
35 # for i in range(0, len(stringData)):
36 # sock.send(stringData[i])
37 sock.send(stringData)
38 ret, frame = capture.read()
39 # cv2.imshow('CLIENT', frame)
40 # if cv2.waitKey(10) == 27:
41 # break
42 # 接收server发送的返回信息
43 data_r = sock.recv(50)
44 print (data_r)
45
46 sock.close()
47 cv2.destroyAllWindows()
python传输视频文件_Python视频传输相关推荐
- python拆分合并文件_Python 视频文件的分割和合并
import os; import time; os.system('start "wmplayer.exe", "F:\\abc.mp4"'); --分割代码 ...
- 如何把视频文件转换为视频二维码的完整教程
如何把视频文件转换为视频二维码的完整教程 二维码已经不经意间快速地融入了我们的生活,我们可以通过扫描二维码来添加好友.付款等等, 那么,如何让视频生成二维码直接免费观看和实现分享呢? 「 视频二维码 ...
- ffmpeg 实现转码一个普通视频文件为视频mpeg4,音频mp3的功能的程序(摘)
本程序实现转码一个普通视频文件为视频mpeg4,音频mp3的功能 #include <avcodec.h> #include <avformat.h> #include < ...
- python压缩视频文件_python使用zlib库压缩图片,使用ffmpeg压缩视频
# ffmpeg -i 1.mp4 -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline -crf 2 ...
- python读视频文件_python读取和保存视频文件
如何用python实现视频关键帧提取并保存为图片?也许你会觉得对小编多做一点事你会觉得你很爽,可是在小编看来这是不屑的 import cv2vc = cv2.VideoCapture('Test.av ...
- python 视频库_Python视频编辑库:MoviePy
MoviePy MoviePy是一个关于视频编辑的python库,主要包括:剪辑,嵌入拼接,标题插入,视频合成(又名非线性编辑),视频处理,和自定制效果.可以看gallery中的一些实例来了解用法.M ...
- python 视频库_Python视频编辑库MoviePy的使用
moviepy官网: https://pypi.org/project/moviepy/ 是一个用于视频编辑的Python库:切割.连接.标题插入.视频合成.非线性编辑,视频处理和定制效果的创建. G ...
- python怎么创建文件夹视频_怎么用python创建文件夹
Python中创建文件夹的方法:import os def mkdir(path): folder = os.path.exists(path) if not folder: ...
- python读取手机文件_python 读取 网络 文件
Python之pandas数据加载.存储 Python之pandas数据加载.存储 0. 输入与输出大致可分为三类: 0.1 读取文本文件和其他更好效的磁盘存储格式 2.2 使用数据库中的数据 0.3 ...
最新文章
- 智能改变未来,创新引领世界,第二届深圳国际人工智能展暨智能制造创新高峰论坛盛大启幕!
- 编译器编译报错时aka是什么意思?(also known as)
- PyQt、QtDesigner及其它工具包的安装
- 理解Vue 2.5的Diff算法
- 肝!Python 网络编程
- 用node.js读写文件
- linux怎么还原bak文件,Linux restore命令:还原dump操作备份下的文件、目录或分区...
- ipython是解释器吗_Ipython 解释器
- Http Handler 介绍
- JSP九大内置对象和四大作用域
- Sun jdk, Openjdk, Icedtea jdk关系
- foxmail邮箱服务器类型,foxmail
- 怎样设置计算机安全模式,电脑怎样进入安全模式
- 免费思维导图mindmanager2020下载安装(附序列号)
- javaScript中的特殊字符
- 一个基于MFC的QQ机器人框架
- 安装Mysql时:没有可用软件包 mysql-server。
- 如何快速搜索电脑文件
- 黑苹果OC引导 多彩绚丽霓虹 主题及安装教程
- Urule Pro 普通决策表的应用,Excel导入决策表