0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用MCU播放SD卡视频?——合宙Air105最新demo带你轻松上手

合宙LuatOS 2022-05-31 10:36 次阅读

近期好些小伙伴看到SD卡视频播放效果觉得很不错,询问有没有相关教程

今天我们将以合宙高性能超值款MCU——Air105开发板为例进行讲解

在进行之前先说一下原理,原理很简单——就是通过MCU,将SD卡中的视频字节流数据读出来在LCD上绘制。

01相关准备工作


硬件准备:

Air105开发板

LCD扩展板

Micro SD读写卡模块

SD卡

排线、面包板若干

注:Air101/Air103开发板也可同样准备,目前demo音频支持尚在开发中,敬请期待。

9788c476-e035-11ec-b80f-dac502259ad0.jpg

软件准备:

开始准备视频字节流数据,我们需要用到FFmpeg这款开源和跨平台的多媒体软件。官方下载win版本的压缩包,获得其中的ffmpeg.exe。

参见https://www.ffmpeg.org/

97bb6c5a-e035-11ec-b80f-dac502259ad0.png

02 视频文件制作


文件准备:

首先准备好一段要播放的视频,和之前的ffmpeg.exe放到一起。

97e79cf8-e035-11ec-b80f-dac502259ad0.png

Windows PowerShell命令输入:

Windows PowerShell输入如下命令,即可将视频转为160x128分辨率的字节流文件:

.\ffmpeg-imwsy.mp4-r20-vfscale=160:128-pix_fmtrgb565be-vcodecrawvideomwsy.rgb

9806bf3e-e035-11ec-b80f-dac502259ad0.png

然后将生成的mwsy.rgb放在SD卡中:

98499926-e035-11ec-b80f-dac502259ad0.png

03 编写播放代码


代码很简单,首先初始化LCD,之后初始化并挂载SD,然后就是读视频向LCD进行draw。


手机上下滑动或横屏查看:

sys.taskInit(function()
--初始化lcd
spi_lcd = spi.deviceSetup(5,pin.PC14,0,0,8,48*1000*1000,spi.MSB,1,1)
log.info("lcd.init",
lcd.init("st7735",{port = "device",pin_dc = pin.PE08 ,pin_rst = pin.PC12,pin_pwr = pin.PE09,direction = 3,w = 160,h = 128,xoffset = 1,yoffset = 2},spi_lcd))
--初始化sd
local spiId = 2
local result = spi.setup(
spiId,--串口id
255, -- 不使用默认CS脚
0,--CPHA
0,--CPOL
8,--数据宽度
400*1000 -- 初始化时使用较低的频率
)
local TF_CS = pin.PB3
gpio.setup(TF_CS, 1)
--fatfs.debug(1) -- 若挂载失败,可以尝试打开调试信息,查找原因
fatfs.mount("SD", spiId, TF_CS, 24000000)
local data, err = fatfs.getfree("SD")
if data then
log.info("fatfs", "getfree", json.encode(data))
else
log.info("fatfs", "err", err)
end

local video_w = 160
local video_h = 128
local rgb_file = "mwsy.rgb"

local buff_size = video_w*video_h*2
local file_size = fs.fsize("/sd/"..rgb_file)
print("/sd/"..rgb_file.." file_size",file_size)

local file = io.open("/sd/"..rgb_file, "rb")
if file then
local file_cnt = 0
local buff = zbuff.create(buff_size)
repeat
if file:fill(buff) then
file_cnt = file_cnt + buff_size
lcd.draw(0, 0, video_w-1, video_h-1, buff)
sys.wait(20)
end
until( file_size - file_cnt < buff_size )
local temp_data = file:fill(buff,0,file_size - file_cnt)
lcd.draw(0, 0, video_w-1, video_h-1, buff)
sys.wait(30)
file:close()
end

while 1 do
sys.wait(1000)
end

end)

最新demo源码:

https://gitee.com/openLuat/LuatOS/tree/master/demo/video_play/Air105

04视频播放效果


988cc930-e035-11ec-b80f-dac502259ad0.gif

好了,享受不一样的时光~

今天就讲解到这里,快拿出开发板动手试试。合宙MCU系列demo持续更新中,敬请关注!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16597

    浏览量

    347152
收藏 人收藏

    评论

    相关推荐

    Air780E硬件设计手册02

    低功耗4G模组Air780E硬件设计介绍
    的头像 发表于 09-06 12:02 33次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>780E硬件设计手册02

    LuatOS产品规格书——Air700EMQ

    本文详细介绍了LuatOS关于Air700EMQ的产品规格信息
    的头像 发表于 08-28 15:54 439次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>LuatOS产品规格书——<b class='flag-5'>Air</b>700EMQ

    Air700EAQ硬件设计手册——应用接口2

    Air700EAQ硬件设计的详细介绍
    的头像 发表于 08-27 14:23 179次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>700EAQ硬件设计手册——应用接口2

    Air700EAQ硬件设计手册——应用接口1

    本文主要介绍Air700EAQ的硬件设计中的应用接口部分。
    的头像 发表于 08-26 17:13 225次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>700EAQ硬件设计手册——应用接口1

    Air700ECQ硬件设计手册——应用接口3

    Air700ECQ硬件设计手册——应用接口部分介绍
    的头像 发表于 08-22 18:34 210次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>700ECQ硬件设计手册——应用接口3

    Air700ECQ硬件设计手册——应用接口2

    Air700ECQ硬件设计手册——应用接口部分。本文介绍了Air700ECQ的应用接口中的开关机,串口,USB接口,USB下载模式和I2C等接口的使用和介绍。   ​
    的头像 发表于 08-22 15:06 214次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>700ECQ硬件设计手册——应用接口2

    Air700ECQ硬件设计手册——应用接口1

    Air700ECQ硬件设计手册——应用接口1
    的头像 发表于 08-21 18:46 159次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>700ECQ硬件设计手册——应用接口1

    MQTT应用看这篇!Air780EP_LuatOS_MQTT应用指南

    Air780EP 是的低功耗4G模组之一,支持LuatOS的脚本二次开发,即使是不太懂技术的老板,也能轻松使用 Air780EP开发产品
    的头像 发表于 08-08 17:13 992次阅读
    MQTT应用看这篇!<b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>780EP_LuatOS_MQTT应用指南

    “花生米”4G模组——Air700EL Air700EY全新上市

    “是花生米太大,还是Air700模组太小?”深受工程师朋友喜爱的Air700系列迷你小封装4G模组,也被称为“花生米”。今天,
    的头像 发表于 12-26 08:04 1751次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>“花生米”4G模组——<b class='flag-5'>Air</b>700EL <b class='flag-5'>Air</b>700EY全新上市

    基于Air001的迷你RGB灯环

    问题来了,你会亲手做来送给最爱的TA吗?基于Air001的迷你RGB灯环-开源分享-本项目以Ai
    的头像 发表于 11-25 08:04 980次阅读
    基于<b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>001的迷你RGB灯环

    送给最爱的TA?基于Air001的迷你RGB灯环

    。 那么问题来了,你会亲手做来送给最爱的TA吗? 基于Air001的迷你RGB灯环 - 开源 分享 - 本项目以
    的头像 发表于 11-24 12:10 2184次阅读
    送给最爱的TA?基于<b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>001的迷你RGB灯环

    基于Air32的手持示波器

    兼容主流F103,仅需3.8元的Air32系列超值国产MCU,性能强、开发快,不少行业客户已广泛应用于量产项目,相比市场主流F103每盘可省数万元!你知道吗,工程师朋友们极为喜爱的
    的头像 发表于 11-21 08:04 638次阅读
    基于<b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>32的手持示波器

    来了!基于Air32的手持示波器

    兼容主流F103,仅需 3.8元的 Air32系列 超值国产MCU,性能强、开发快,不少行业客户已广泛应用于量产项目,相比市场主流F103每盘可省数万元! 你知道吗,工程师朋友们极
    的头像 发表于 11-20 12:15 1839次阅读

    Air001迷你版音乐频谱桌面小摆件

    敏感用户打造」的Air001系列MCU。今天特别分享@墨镜臭猫大佬的开源佳作——音乐频谱桌面小摆件,分为基于
    的头像 发表于 11-04 08:05 586次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>001迷你版音乐频谱桌面小摆件

    Air153C看门狗芯片来了

    Air780E为代表的低功耗4G-Cat.1系列模组,内置软狗功能使用便捷。在一些对功能安全要求较高的应用场景,可再外置看门狗(硬狗)强化项目设计。为方便广大客户配套开发,
    的头像 发表于 09-12 08:05 1479次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>153C看门狗芯片来了