提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
问题描述:一台电脑、一部手机在同一局域网下,如何编程实现手机实时观看电脑摄像头获取的视频或录像。本次任务实际就是实现如何将电脑的视频通过网络传输到手机客户端。
一、解决思路
1.在电脑上编写一个应用程序,使用合适的库来获取电脑摄像头的图像。你可以使用例如OpenCV、JavaCV等库来进行图像获取和处理,本文采用python+openCV实现。
2.将获取到的图像数据编码为一个视频格式,例如H.264。
3.在 Android 手机上编写一个应用程序,通过网络连接与电脑通信,并接收电脑传输的视频数据,网络通信可以通过tcp/ip或udp协议,本文采用tcp/ip协议。
4.在 Android 应用程序中创建一个布局,其中包含一个 SurfaceView 用于显示视频图像。
二、使用步骤
1.编写电脑端程序(电脑作为服务端)
import cv2
import socket
import struct
import pickle
# `创建Tcp套接字并绑定到地址和端口`
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("IP_ADDRESS", PORT_NUMBER))#这里换成你自己的电脑ip
server_socket.listen(5)
# server_socket.connect(('192.168.0.137', 8081))
# 接受客户端连接
client_socket, ddr = server_socket.accept()
print('连接来自:', ddr)
# 打开摄像头
# 如果是网络摄像头采用url地址,如果是自带usb摄像头直接将url改为0
url = 'rtsp://account:password@your webcam ip:554/11'
cap = cv2.VideoCapture(url)
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]
while True:
# 读取图像帧
ret, frame = cap.read()
result, frame0 = cv2.imencode('.jpg', frame)
# # 将图像序列化为字节流
# data = pickle.dumps(frame0, 0)
# # 将图像大小打包并发送给客户端
# size = struct.pack('<L', len(data))
# client_socket.sendall(size + data)
# 发送图像大小
size = len(frame0)
client_socket.sendall(size.to_bytes(4,'big'))
# 发送图像数据
client_socket.sendall(frame0)
cv2.imshow('webcam'