ESP8266WIFI连网播放视频 您所在的位置:网站首页 addprw马桶 ESP8266WIFI连网播放视频

ESP8266WIFI连网播放视频

2023-03-28 02:46| 来源: 网络整理| 查看: 265

本篇介绍ESP8266在OLED上播放视频:

电脑端Python程序作为视频数据的服务器,借助OpenCV实时读取视频帧,并进行二值图像转换,尺寸调整,再将二值图像转为数组,并以二进制形式的数据通过socket方式无线发送给ESP8266。 ESP8266采用Arduino IDE编程,借助U8g2库,将图像数据实时显示到OLED屏幕中。

1 ESP8266端视频帧接收与播放程序

ESP8266作为socket客户端,接收服务端发送的图像帧数据,进行显示。

ESP8266使用Arduino IDE环境进行开发。

1.1 WIFI初始化与服务器连接 #define IP "192.168.5.100" #define PORT 8080 void initWiFi() { Serial.print("Connecting WiFi..."); WiFi.mode(WIFI_STA); //配置WIFI为Station模式 WiFi.begin(ssid, pass); //传入WIFI热点的ssid和密码 while (WiFi.status() != WL_CONNECTED) //等待连接成功 { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); //打印自己的IP地址 client.connect(IP, PORT); } 1.2 视频显示主循环 uint8_t testb[1024] = { }; void loop() { //Serial.println("hello esp8266"); delay(10); while (client.available()) { delay(12); client.read(testb, 1024); u8g2.firstPage(); do { u8g2.drawXBM(0, 0, 128, 64, testb); } while (u8g2.nextPage()); } } 2电脑端视频编码发送程序

电脑端作为socket服务器端,将视频帧数据发送出去。

电脑端采用Python3编程,借助OpenCV实现视频的读取与图像数据格式转换。

2.1 主程序

程序的基本思想是:

利用OpenCV读取视频文件 对视频帧的图像,进行尺寸修改 对图像进行二值化处理 将二值图像转换为数组 将数组通过socket发送出去 video_path="badapple_320240_xvid.mp4" def PlayVideo(video_path, client): endian = 'L' color_reverse = 'false' c = 0#累计帧数 timeF = 8#隔x帧截一次图 video = cv2.VideoCapture(video_path) #打开视频 player = MediaPlayer(video_path) #打开音频 while True: grabbed, frame= video.read() audio_frame, val = player.get_frame() if not grabbed: print("End of video") break if cv2.waitKey(28) & 0xFF == ord("q"): break cv2.imshow("Video", frame) if val != 'eof' and audio_frame is not None: img, t = audio_frame if (c % timeF == 0): # 每隔timeF帧进行存储操作 frame = cv2.resize(frame,(128,64))#调整尺寸 frame = binary_image(frame)#二值化 matrix = img_to_matrix(frame, endian, color_reverse) data = bytes(matrix) client.send(data) c = c + 1 #time.sleep(0.2) #cv2.waitKey(1) video.release() cv2.destroyAllWindows() ############### client = 0 client = socket_start() PlayVideo(video_path, client) 2.2 图像转为数组

利用OpenCV,将图像转为黑白图像:

def binary_image(image):#将图像处理为二值化的程序 gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) #把输入图像灰度化 h, w =gray.shape[:2] m = np.reshape(gray, [1,w*h]) mean = m.sum()/(w*h) ret, binary = cv2.threshold(gray, mean, 255, cv2.THRESH_OTSU) return binary

然后再转为数组:

def img_to_matrix(frame, endian, color_reverse): width = frame.shape[1] #128 height = frame.shape[0] #64 if endian == 'B': byte_reverse = True else: byte_reverse = False if color_reverse == 'true': color_reverse = True else: color_reverse = False unalign = 0 matrix = list() if (width%8) != 0: unalign = 1 for i in range(0, height): #64 for j in range(0, (width//8)+unalign): #128/8=16 v = 0x00 rs = 8*j re = 8*(j+1) if re > width: re = width for k in range(rs, re): if frame[i, k] != 0: if not byte_reverse: v |= (0x01


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有