什么是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编码,欢迎在评论区分享你的项目作品

