|
在160x80分辨率的屏幕上看部电影是什么感觉,用这个9.9包邮的合宙luatOS开发板+配套TFT板就可以来体验一下项目开源地址:https://github.com/zhuhai-esp/LuatOS-C3-Video-Cast
上位机软件就用Python开发一个吧,上位机的工作只有两件事:
1. 读取视频文件并做相关变换,我采用OpenCV
2. TCP连接单片机并发送视频数据
- import socket
- import cv2
- if __name__ == "__main__":
- print('请保障PC和开发板访问同一个局域网!')
- ip = input('请输入开发板IP地址:')
- cap = cv2.VideoCapture('video.mp4')
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- s.connect((ip, 8888))
- encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]
- while cap.isOpened():
- _, frame = cap.read()
- dst = cv2.resize(frame, (160, 80))
- _, jpg = cv2.imencode('.jpg', dst, encode_param)
- ba = bytearray(jpg)
- cv2.imshow('frame', frame)
- s.send(ba)
- if cv2.waitKey(25) & 0xFF == ord('q'):
- break
- cap.release()
- cv2.destroyAllWindows()
- s.close()
复制代码
关于视频数据发送一般有2种方案:
1. 非压缩位图发送,每一帧固定发送160x80x2个字节数据,缺点是数据量过大
2. 采用JPEG压缩,每一帧发送数据不是定长,网络数据得到很大压缩
单片机设备端需要做什么操作呢?
1. 快速配网连接网络,使用smartConfig吧
2. 开启TCP服务监听端口:
- WiFiServer server(serverPort);
- server.begin();
复制代码
3. 读取网络数据,JPEG解码(若位图发送不需要解码):
- WiFiClient client = server.available();
- int batch = client.read(pRead, capable);
- TJpgDec.drawJpg(0, 0, pTail, pFNext - pTail);
复制代码
4. 显示图像(显示依赖于TFT_eSPI库):
- tft.pushImage(x, y, w, h, bmp);
复制代码
这样就可以TCP视频投屏就显示出来了
电脑上也会同步显示:
项目开源地址:https://github.com/zhuhai-esp/LuatOS-C3-Video-Cast
嵌入式端采用VSCode打开即可
上位机端可以用PyCharm打开,系统需要安装OpenCV库
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|