maix dock 如何循环播放视频?(已解决)

2021-04-045942
AI 快速预览详细 收起
本文提供了解决 Maix Dock 上视频播放结束后卡住的问题的方法。通过删除视频对象并重新打开视频文件,结合内存释放(gc),可以实现视频的循环播放。具体步骤包括初始化 I2S 和 LCD,配置音频输出,打开视频文件,并在播放结束后删除视频对象并重新打开。这样可以确保视频能够无缝循环播放,提升用户体验。


第一次播放是正常的,播放结束后回到视频第一帧然后卡住。

代码如图,我把视频对象删除(_del_),后再open,也不行。怀疑是内存没释放,然后加了gc,还是不行。
完整代码:

from Maix import GPIO, I2S
#import sys
import gc
from fpioa_manager import fm
import lcd
import video
import time

lcd.init()

# AUDIO_PA_EN_PIN = None  # Bit Dock and old MaixGo
AUDIO_PA_EN_PIN = 32      # Maix Go(version 2.20)
# AUDIO_PA_EN_PIN = 2     # Maixduino
''''''
# init i2s(i2s0)
i2s = I2S(I2S.DEVICE_0)

# config i2s according to audio info
i2s.channel_config(i2s.CHANNEL_1, I2S.TRANSMITTER, resolution=I2S.RESOLUTION_16_BIT,
                       cycles=I2S.SCLK_CYCLES_32, align_mode=I2S.RIGHT_JUSTIFYING_MODE)

# open audio PA
if AUDIO_PA_EN_PIN:
    fm.register(AUDIO_PA_EN_PIN, fm.fpioa.GPIO1, force=True)
    wifi_en = GPIO(GPIO.GPIO1, GPIO.OUT)
    wifi_en.value(1)

fm.register(34,  fm.fpioa.I2S0_OUT_D1, force=True)
fm.register(35,  fm.fpioa.I2S0_SCLK, force=True)
fm.register(33,  fm.fpioa.I2S0_WS, force=True)

v = video.open("/sd/2.avi")
print(v)
v.volume(50)
while True:
    if v.play() == 0:
        print("play end")
        v.__del__()
        gc.collect()
        v = video.open("/sd/2.avi")
        #break
v.__del__()


重复播放视频不行.PNG (9.7 KB, 下载次数: 6514)

Maix Dock 循环播放视频解决方案_image_3.webp

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(3)
这躯体几成腐坏
这躯体几成腐坏
作者
没解决啊,怎么那么快把我标注成已解决了
Sipeed-大佬鼠
Sipeed-大佬鼠回复这躯体几成腐坏
好像是有点奇怪?怎么就解决了?但这个功能我是测过的,你最好单独运行代码测试,复制两遍运行确认。
这躯体几成腐坏
这躯体几成腐坏
作者
avi类下面只有这些方法,没有close
这躯体几成腐坏
这躯体几成腐坏
作者
@Sipeed-大佬鼠
这躯体几成腐坏
这躯体几成腐坏
作者
回复这躯体几成腐坏
这里我同时写了del和close,但我试过单独写一个,也不行。后面再open就卡死
这躯体几成腐坏
这躯体几成腐坏
作者
回复Sipeed-大佬鼠
我写了del,不行。写close的就报avi类没有close方法。
共4条回复,已加载2条,点击查看更多共4条回复,已加载全部
- 没有更多了 -