描述:linux作为服务器,将摄像头的视频数据实时传输到安卓客户端。
主要思路:linux端通过opencv,连续获取摄像头图片,然后将图片压缩,通过socket传输给 安卓客户端,安卓客户端接收数据后将图片用控件(ImgView)显示出来。连续的的图片 组成了视频。
1,服务端
#!/usr/bin/env python
# -*- coding=utf-8 -*-
import socket
import numpy as np
import urllib
import cv2 as cv
import threading
import time
import sys
print('this is Server')
cap = cv.VideoCapture(0)
cap.set(cv.CAP_PROP_FRAME_WIDTH, 200)
cap.set(cv.CAP_PROP_FRAME_HEIGHT, 200)
def socket_service():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 防止socket server重启后端口被占用(socket.error: [Errno 98] Address already in use)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
#s.bind(('127.0.0.1', 6666))
s.bind(('192.168.16.107', 6666))
s.listen(10)
except socket.error as msg:
print (msg)
sys.exit(1)
print ('Waiting connection...')
while True:
conn, addr = s.accept()
t = threading.Thread(target=deal_data, args=(conn, addr))
t.start()
def deal_data(conn, addr):
print ('Accept new connection from {0}'.format(addr))
while True:
# get a frame
ret, frame = cap.read()
# 重整图片像素大小
frame = cv.resize(fr