各位开发者朋友们,CanMV又迎来实用能力更新!
本次正式上线 MJPEGEncoder 硬件JPEG编码模块,依托K230/K230D内置VENC硬件编码器,结合配套Web视频流例程,无需安装任何播放器,局域网内浏览器即可直接查看摄像头实时画面,快速实现嵌入式Web摄像头、远程预览、截图抓拍等场景。

什么是MJPEGEncoder
MJPEGEncoder 直接调用芯片VENC硬件编码单元,支持将Sensor输出YUV视频帧、image.Image图像编码为完整JPEG字节流。
-
硬件编码,不占用CPU,兼顾性能与功耗;
-
优先直接编码Sensor VB视频帧,避免图像内存拷贝,高分辨率下性能更优;
-
JPEG质量可配置,范围1‑99,灵活平衡画质与带宽;
-
自动管理VENC通道与VB缓冲区,资源按需申请,使用完毕调用close()即可释放硬件资源。
导入方式
from media.mjpeg import MJPEGEncoder
开箱即用:
MJPEG网页视频流例程
SDK内置完整Web MJPEG图传例程mjpeg_web_server.py,基于HTTP multipart/x‑mixed‑replace协议,手机、电脑浏览器直接访问即可预览实时画面,不用部署流媒体服务、不用安装VLC等播放器。
文件位置
-
开发板固件路径:/sdcard/examples/02‑Media/mjpeg_web_server.py
-
SDK源码路径:src/canmv/resources/examples/02‑Media/mjpeg_web_server.py
核心配置项
脚本头部可直接修改网络、分辨率、编码质量、帧率等参数:
-
支持WiFi‑STA / WiFi‑AP / LAN有线网络;
-
FRAME_ALIGNMENT=12,适配VENC硬件4096字节对齐要求;
-
JPEG_QUALITY调节图片压缩质量;
-
STREAM_FPS设置视频流帧率上限。
接口能力
例程内置3个HTTP接口,开箱可用:
|
访问路径 |
功能说明 |
|
/ |
Web实时预览主页,内置JS断线自动重连 |
|
/stream |
MJPEG视频流数据流接口 |
|
/snapshot.jpg |
获取当前时刻单帧截图JPEG |
运行脚本后,串口打印访问地址,同局域网设备浏览器打开地址即可查看画面。网页内置异常重连逻辑,流断开后自动重试,无需手动刷新页面。
大帧网络发送优化
针对1080P大尺寸JPEG传输容易超时断开的痛点,例程做了专门优化: Socket设置为非阻塞模式,JPEG数据包按16KiB分块发送;遇到EAGAIN临时阻塞会持续重试;连续5秒无发送进度才关闭客户端,有效解决TCP回压导致画面只出一帧就断开的问题。
使用注意要点
-
Sensor输出YUV帧务必设置 alignment=12,保证图像平面4096字节对齐,否则VENC编码会报错;高分辨率场景务必开启USE_VIDEO_FRAME=True,直接使用Sensor视频帧,减少内存拷贝开销。
-
当前例程为单客户端同步模型,同一时刻仅支持一个浏览器连接视频流。
-
实际帧率受WiFi带宽、编码质量、浏览器消费速度影响;画面延迟高可以降低分辨率、降低JPEG质量、下调目标帧率。
-
脚本退出会自动关闭Socket、编码器、Sensor,防止VENC通道、VB缓冲池资源泄漏。
简单编码示例
from media.mjpeg import MJPEGEncoderfrom media.sensor import Sensorsensor = Sensor()encoder = Nonetry:sensor.reset()sensor.set_framesize(width=1920, height=1080, alignment=12)sensor.set_pixformat(Sensor.YUV420SP)sensor.run()encoder = MJPEGEncoder(quality=50)frame = sensor.snapshot(dump_frame=True)jpeg_data = encoder.encode(frame, timeout_ms=1000)# 可写入文件 / 通过socket发送with open("/sdcard/snapshot.jpg","wb") as f:f.write(jpeg_data)finally:if encoder is not None:encoder.close()sensor.stop()
适用场景
-
AI项目调试远程预览摄像头画面;
-
简易嵌入式Web监控、无线图传;
-
抓拍截图,本地保存JPEG图像;
-
与K230 NPU推理结合,实现AI识别结果网页可视化。
参考文档
-
MJPEG例程文档:
https://www.kendryte.com/k230_canmv/zh/main/example/media/mjpeg.html
-
MJPEGEncoder API手册:
https://www.kendryte.com/k230_canmv/zh/main/api/mpp/media_mjpeg.html
快去更新固件,上手体验硬件MJPEG编码,欢迎在评论区分享你的项目作品
点森科技 - 科技资讯_数码产品_互联网观察_智能硬件


