ITPub博客

首页 > 嵌入式/内核开发 > 嵌入式/内核开发 > 《DNK210使用指南 -CanMV版 V1.0 》第三十一章 视频播放实验

《DNK210使用指南 -CanMV版 V1.0 》第三十一章 视频播放实验

原创 嵌入式/内核开发 作者:正点原子 时间:2024-12-24 09:10:57 0 删除 编辑

第三十一章 视频播放实验


       本章将介绍CanMV下的视频播放,通过CanMV提供的模块便能快速实现视频播放。通过本章的学习,读者将学习到CanMV下video模块的使用。

       本章分为如下几个小节:

       31.1 video模块介绍

       31.2 硬件设计

       31.3 程序设计

       31.4 运行验证


        31.1 video模块介绍

       video模块时CanMV内置的模块,video模块用于视频的播放,video模块可以对指定文件系统路径的视频文件进行音视频解码,然后将其音频通过I2S接口进行输出,视频数据则解码后通过LCD进行显示。

       video模块为Video对象提供了open()方法,用于打开一个文件系统中的视频文件,来进行视频的播放,并返回一个Video对象,open()方法如下所示:

video.open(path, record=False, interval=100000, quality=50, width=320, height=240, audio=False, sample_rate=44100, channels=1)

       open()方法用于打开一个文件系统中的视频文件,来进行视频播放或录制,同时返回一个Video对象,仅支持AVI格式的视频文件。

       path指的是视频文件在文件系统中的路径。

       record指的是是否进行视频录制,当为False时,进行视频播放,当为True时,则进行视频录制。

       interval指的是视频录制的帧间隔,单位为微秒。

       quality指的是视频录制时图像数据的压缩质量,范围为[1, 100]。

       width指的是视频录制的图像宽度。

       height指的是视频录制的图像高度。

       audio指的是视频录制时是否录制音频,当为False时,则不录制音频,反之为True时,则录制音频。

       sample_rate指的是当录制视频且录制音频时,录制音频的采样率。

       channels指的时方录制视频且录制音频时,录制音频的声道数。

       open()函数的使用示例如下所示:

import video
 
video_player = video.open("/sd/VIDEO/play.avi")

       video模块为Video对象提供了volume()方法,用于配置播放音频时的音量,volume()方法如下所示:

video.volume(volume)

       volume()方法用于配置播放音频时的音量。

       volume指的是配置的音量,范围为[0, 100]。

       volume()方法的使用示例如下所示:

import video
 
video_player = video.open("/sd/VIDEO/play.avi")
video_player.volume(30)

       video模块为Video对象提供了play()方法,用于读取视频文件并解析播放,play()方法如下所示:

video.play()

       play()方法用于读取视频文件并解析播放,每次执行play()函数会读取并解析播放一小段视频文件,因此play()函数需要配合循环使用。

       play()方法的使用示例如下所示:

import video
 
video_player = video.open("/sd/VIDEO/play.avi")
 
while video_player.play():
    pass

       需要特别注意的时,使用video模块播放视频文件的时,I2S0 Channel0、DMAC Channel4将会被系统占用,并且在使用video模块播放视频文件前,需要对I2S0 Channel0进行配置。


        31.2 硬件设计


       31.2.1 例程功能

       1. 使用video模块播放CanMV文件系统中指定的视频文件,图像通过LCD进行显示,音频通过板载扬声器进行播放。


       31.2.2 硬件资源

       1. LCD

               LCD_RD - IO34

              LCD_BL - IO35

              LCD_CS - IO36

              LCD_RST - IO37

              LCD_RS - IO38

              LCD_WR - IO39

              LCD_D0~LCD_D7 - SPI0_D0~SPI0_D7


       2. 数字功放NS4168

              SPK_CTRL - IO21

              IIS_SDOUT - IO31

              IIS_BCK - IO32

              IIS_LRCK - IO33


       31.2.3 原理图

       本章实验内容,主要讲解video模块的使用,无需关注原理图。


        31.3 程序设计


       31.3.1 video模块介绍

       有关video模块的介绍,请见第31.1小节《video模块介绍》。


       31.3.2 程序流程图


图31.3.2.1 视频播放实验流程图


       31.3.3 main.py代码

       main.py中的脚本代码如下所示:

from board import board_info
from fpioa_manager import fm
from maix import GPIO
from maix import I2S
import lcd
import video
 
lcd.init()
 
fm.register(board_info.SPK_CTRL, fm.fpioa.GPIO0)
fm.register(board_info.SPK_WS, fm.fpioa.I2S0_WS)
fm.register(board_info.SPK_SCLK, fm.fpioa.I2S0_SCLK)
fm.register(board_info.SPK_SDOUT, fm.fpioa.I2S0_OUT_D0)
 
spk_ctl = GPIO(GPIO.GPIO0, GPIO.OUT)
spk_ctl.value(1)
 
i2s_dev = I2S(I2S.DEVICE_0)
i2s_dev.channel_config(I2S.CHANNEL_0, I2S.TRANSMITTER, resolution=I2S.RESOLUTION_16_BIT, cycles=I2S.SCLK_CYCLES_32, align_mode=I2S.STANDARD_MODE)
 
# 构造Vedio对象并配置音频播放音量
video_player = video.open("/sd/VIDEO/play.avi")
video_player.volume(30)
 
# 循环播放视频
while video_player.play():
    pass
 
# 结束视频播放
video_player.__del__()

       可以看到首先初始化了LCD并为GPIO以及I2S分配IO,然后控制数字功放NS4168的CTRL引脚为高电平,此时NS4168被配置为控制扬声器播放音频数据中的右声道音频。

       接着是构造了一个I2S对象,并配置了I2S对应的通道为发送模式,因为本实验需要播放视频中的音频数据。

       再接着构造了一个Video对象,Video对象与文件系统中的视频文件进行绑定,然后配置了音频播放的音量。

       然后就是循环播放视频数据了,如果都没有问题的话,此时应该能在LCD上观察到视频画面,并听见DNK210开发板板载的扬声器发声了。

       最后在视频文件播放完毕后,结束视频播放,释放视频播放占用的资源。


        31.4 运行验证

       将DNK210开发板连接CanMV IDE,同时将实验例程目录下的play.avi视频文件放入SD卡根目录下的media文件夹下后,点击CanMV IDE上的“开始(运行脚本)”按钮后,可以听到DNK210开发板板载的扬声器播放了play.avi视频文件中的音频,且LCD上显示了视频中的画面,如下图所示:


图31.4.1 LCD播放视频画面


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040860/viewspace-3058767/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-30

  • 博文量
    588
  • 访问量
    763872