科技 · 创新 · 未来

【K230/K230D 新技能点亮】K230 CanMV MJPEG 能力解锁,局域网浏览器实时预览摄像头画面


各位开发者朋友们,CanMV又迎来实用能力更新!

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

6aac7f8ae0411 - 科技资讯 前沿科技 人工智能 芯片 5G 互联网技术 科技创新
6aac7f8b31ad1 - 科技资讯 前沿科技 人工智能 芯片 5G 互联网技术 科技创新




什么是MJPEGEncoder

6aac7f8b6f4e6 - 科技资讯 前沿科技 人工智能 芯片 5G 互联网技术 科技创新


MJPEGEncoder 直接调用芯片VENC硬件编码单元,支持将Sensor输出YUV视频帧、image.Image图像编码为完整JPEG字节流。

  •  硬件编码,不占用CPU,兼顾性能与功耗;

  • 优先直接编码Sensor VB视频帧,避免图像内存拷贝,高分辨率下性能更优;

  • JPEG质量可配置,范围1‑99,灵活平衡画质与带宽;

  • 自动管理VENC通道与VB缓冲区,资源按需申请,使用完毕调用close()即可释放硬件资源。


导入方式


from media.mjpeg import MJPEGEncoder




开箱即用:

MJPEG网页视频流例程

6aac7f8ba5c49 - 科技资讯 前沿科技 人工智能 芯片 5G 互联网技术 科技创新


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




核心配置项

6aac7f8bed411 - 科技资讯 前沿科技 人工智能 芯片 5G 互联网技术 科技创新

脚本头部可直接修改网络、分辨率、编码质量、帧率等参数:

  • 支持WiFi‑STA / WiFi‑AP / LAN有线网络;

  • FRAME_ALIGNMENT=12,适配VENC硬件4096字节对齐要求;

  • JPEG_QUALITY调节图片压缩质量;

  • STREAM_FPS设置视频流帧率上限。




接口能力

6aac7f8c3778f - 科技资讯 前沿科技 人工智能 芯片 5G 互联网技术 科技创新


例程内置3个HTTP接口,开箱可用:

访问路径

功能说明

/

Web实时预览主页,内置JS断线自动重连

/stream

MJPEG视频流数据流接口

/snapshot.jpg

获取当前时刻单帧截图JPEG


运行脚本后,串口打印访问地址,同局域网设备浏览器打开地址即可查看画面。网页内置异常重连逻辑,流断开后自动重试,无需手动刷新页面。




大帧网络发送优化

6aac7f8c65860 - 科技资讯 前沿科技 人工智能 芯片 5G 互联网技术 科技创新


针对1080P大尺寸JPEG传输容易超时断开的痛点,例程做了专门优化: Socket设置为非阻塞模式,JPEG数据包按16KiB分块发送;遇到EAGAIN临时阻塞会持续重试;连续5秒无发送进度才关闭客户端,有效解决TCP回压导致画面只出一帧就断开的问题。




使用注意要点

6aac7f8ca74bc - 科技资讯 前沿科技 人工智能 芯片 5G 互联网技术 科技创新


  1. Sensor输出YUV帧务必设置 alignment=12,保证图像平面4096字节对齐,否则VENC编码会报错;高分辨率场景务必开启USE_VIDEO_FRAME=True,直接使用Sensor视频帧,减少内存拷贝开销。

  2. 当前例程为单客户端同步模型,同一时刻仅支持一个浏览器连接视频流。

  3. 实际帧率受WiFi带宽、编码质量、浏览器消费速度影响;画面延迟高可以降低分辨率、降低JPEG质量、下调目标帧率。

  4. 脚本退出会自动关闭Socket、编码器、Sensor,防止VENC通道、VB缓冲池资源泄漏。




简单编码示例

6aac7f8ce3991 - 科技资讯 前沿科技 人工智能 芯片 5G 互联网技术 科技创新

from media.mjpeg import MJPEGEncoderfrom media.sensor import Sensor
sensor = 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()




适用场景

6aac7f8d3406d - 科技资讯 前沿科技 人工智能 芯片 5G 互联网技术 科技创新

  • AI项目调试远程预览摄像头画面;

  • 简易嵌入式Web监控、无线图传;

  • 抓拍截图,本地保存JPEG图像;

  • 与K230 NPU推理结合,实现AI识别结果网页可视化。




参考文档

6aac7f8d64370 - 科技资讯 前沿科技 人工智能 芯片 5G 互联网技术 科技创新


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


未经允许不得转载:点森科技 - 科技资讯_数码产品_互联网观察_智能硬件 » 【K230/K230D 新技能点亮】K230 CanMV MJPEG 能力解锁,局域网浏览器实时预览摄像头画面

分享到: 生成海报