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

    文章

    16984

    浏览量

    350292
收藏 人收藏

    评论

    相关推荐

    你要的录音&amp;播放录音功能,直接用!Air201资产定位模组LuatOS快速入门

    ​ 超低功耗、精准定位、快速量产——迷你小巧的Air201,正给越来越多的行业客户带来高效开发体验。 此前有小伙伴问:是否支持录音、播放录音功能? 高集成化设计的
    的头像 发表于 09-27 07:06 220次阅读
    你要的录音&amp;<b class='flag-5'>播放</b>录音功能,直接用!<b class='flag-5'>Air</b>201资产定位模组LuatOS快速入门

    Air780E硬件设计手册02

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

    低功耗4G模组Air780EP——硬件设计02

    低功耗4G模组Air780EP——硬件设计
    的头像 发表于 09-03 15:07 583次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>低功耗4G模组<b class='flag-5'>Air</b>780EP——硬件设计02

    低功耗4G模组Air780EQ——硬件设计手册01

    低功耗4G模组Air780EQ的硬件设计介绍
    的头像 发表于 08-29 18:15 2064次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>低功耗4G模组<b class='flag-5'>Air</b>780EQ——硬件设计手册01

    LuatOS产品规格书——Air700EMQ

    本文详细介绍了LuatOS关于Air700EMQ的产品规格信息
    的头像 发表于 08-28 15:54 760次阅读
    <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 368次阅读
    <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 443次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>700EAQ硬件设计手册——应用接口1

    LuatOS开发板使用手册——Air700ECQ

    LuatOS开发板使用说明——Air700ECQ
    的头像 发表于 08-23 16:28 512次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>LuatOS开发板使用手册——<b class='flag-5'>Air</b>700ECQ

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

    Air700ECQ硬件设计手册——应用接口部分介绍
    的头像 发表于 08-22 18:34 402次阅读
    <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 364次阅读
    <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 327次阅读
    <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 1740次阅读
    MQTT应用看这篇!<b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>780EP_LuatOS_MQTT应用指南

    Air780EP模块Lua开发阿里云应用指南

    Air780EP模块Lua开发阿里云超详细教学!看完包学会!
    的头像 发表于 08-08 09:00 864次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>780EP模块Lua开发阿里云应用指南

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

    “是花生米太大,还是Air700模组太小?”深受工程师朋友喜爱的Air700系列迷你小封装4G模组,也被称为“花生米”。今天,
    的头像 发表于 12-26 08:04 2087次阅读
    <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全新上市

    海外模组硬核出击,Air780UA&amp;amp;Air780UU全新上市

    ,全新推出2款海外模组——Air780UA、Air780UU。1Air780UA/Air78
    的头像 发表于 12-14 08:04 911次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>海外模组硬核出击,<b class='flag-5'>Air</b>780UA&amp;amp;<b class='flag-5'>Air</b>780UU全新上市