02-Media-11-video_player.py 对H.264或H.265格式视频播放器的示例程序

video_player.py 是K230 CanMV 的播放器模块 API,支持 MP4 格式文件的播放。该模块能够同时播放音频与视频,音频格式支持 G.711A/U,视频格式支持 H.264/H.265 编码。

主要程序功能如下:

  1. 导入必要的模块:播放器模块、显示模块和操作系统模块。

    from media.player import * # 导入播放器相关功能,包括Player类

    from media.display import * # 导入显示相关功能,包括Display类

    import os # 导入操作系统接口,用于处理文件和退出点

  2. 定义全局变量start_play,用于控制播放循环,标识播放是否开始。当播放开始时设置为True,播放结束时设置为False。

  3. 定义事件回调函数player_event,用于处理播放器事件,特别是播放结束事件(EOF)。

    当播放器事件发生时,会调用此函数。事件类型包括播放结束、错误等。

    这里只处理了播放结束事件(K_PLAYER_EVENT_EOF),当事件为EOF时,将start_play设置为False,从而退出播放循环。

  4. 定义主函数play_mp4_test,用于设置播放器、加载文件、开始播放并等待播放结束。

    1). 创建Player对象,并指定显示设备。这里提供了三种显示设备选项:

    • Display.VIRT: 使用IDE作为输出显示,可以设定任意分辨率

    • Display.ST7701: 使用ST7701 LCD屏作为输出显示,最大分辨率800*480

    • Display.LT9611: 使用HDMI作为输出显示

    2). 调用player.load(filename)加载指定的MP4文件。

    3). 设置事件回调函数player_event。

    4). 调用player.start()开始播放,并将start_play设置为True。

    5). 进入一个循环,等待播放结束。循环中每隔0.1秒检查一次start_play的状态,同时检查退出点(允许通过键盘中断等退出)。

    6). 如果捕获到KeyboardInterrupt(如用户按下Ctrl+C)或其他异常,则打印异常信息。

    7). 最后调用player.stop()停止播放,并打印"play over"。

  5. 在主程序中,启用退出点(用于安全中断)并调用播放函数。

程序代码如下:

python 复制代码
# play mp4 file example
#
# Note: You will need an SD card to run this example.
#
# You can load local files to play. The current version only supports MP4 format, video supports 264/265, and audio supports g711a/g711u.

from media.player import * #导入播放器模块,用于播放mp4文件
from media.display import *
import os

import time

start_play = False #播放结束flag
def player_event(event,data):
    global start_play
    if(event == K_PLAYER_EVENT_EOF): #播放结束标识
        start_play = False #设置播放结束标识

def play_mp4_test(filename):
    global start_play


    #等待播放结束
    try:
    
        #player=Player(Display.VIRT) #使用IDE作为输出显示,可以设定任意分辨率
        player=Player(Display.ST7701) #使用ST7701 LCD屏作为输出显示,最大分辨率800*480
        #player=Player(Display.LT9611) #使用HDMI作为输出显示
        player.load(filename) #加载mp4文件
        player.set_event_callback(player_event) #设置播放器事件回调
        player.start() #开始播放
        start_play = True    
    
        while(start_play):
            time.sleep(0.1)
            os.exitpoint()
    except KeyboardInterrupt as e:
        print("user stop: ", e)
    except BaseException as e:
        import sys
        sys.print_exception(e)

    player.stop() #停止播放
    print("play over")

if __name__ == "__main__":
    os.exitpoint(os.EXITPOINT_ENABLE)
    
    try:
        play_mp4_test("/data/examples/test.mp4")#播放mp4文件 video_play.mp4
        #play_mp4_test("/sdcard/video_play.mp4")#播放mp4文件 video_play.mp4
    except KeyboardInterrupt as e:
        print("user stop: ", e)
    except BaseException as e:
        import sys
        sys.print_exception(e)

遇到的问题:

实际执行示例时,没有想到,出错了-_-!

一开始将文件放在了data目录下,用程序默认的路径sdcard目录时报错如下:

OSError: ('kd_mp4_create failed:', '/sdcard/video_play.mp4')

这个错误修正以下文件实际存放目录路径即可解决。

还有提示错误如下:

AttributeError: 'Player' object has no attribute 'vdec'

AttributeError: 'Player' object has no attribute 'pyaudio'

开发板的镜像更新的还算是比较新的:

CanMV v1.4-7-g4618dc2(based on Micropython e00a144) on 2025-09-19; k230_canmv_01studio with K230

问题还没解决,留着占位,哪位大佬来指点一下,多谢了!

相关推荐
喵手几秒前
Python爬虫实战:采集菜谱网站的“分类/列表页”(例如“家常菜”或“烘焙”频道)数据,构建高可用的美食菜谱数据采集流水线(附CSV导出)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集菜谱网站数据·家常菜或烘焙频道·构建高可用食谱数据采集系统
喵手2 分钟前
Python爬虫实战:硬核解析 Google Chrome 官方更新日志(正则+文本清洗篇)(附 CSV 导出)!
爬虫·python·爬虫实战·零基础python爬虫教学·csv导出·监控谷歌版本发布历史·获取稳定版更新日志
小邓睡不饱耶4 分钟前
实战|W餐饮平台智能化菜品推荐方案(含Spark实操+算法选型+完整流程)
python·ai·ai编程·ai写作
草莓熊Lotso7 分钟前
Qt 主窗口核心组件实战:菜单栏、工具栏、状态栏、浮动窗口全攻略
运维·开发语言·人工智能·python·qt·ui
愚公搬代码7 分钟前
【愚公系列】《AI短视频创作一本通》019-AI语音及音乐的创作(AI短视频语音创作实例)
人工智能·音视频
aiguangyuan11 分钟前
基于BiLSTM-CRF的命名实体识别模型:原理剖析与实现详解
人工智能·python·nlp
禹凕15 分钟前
Python编程——进阶知识(MYSQL引导入门)
开发语言·python·mysql
阿钱真强道17 分钟前
13 JetLinks MQTT:网关设备与网关子设备 - 温控设备场景
python·网络协议·harmonyos
我的xiaodoujiao20 分钟前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 47--设置Selenium以无头模式运行代码
python·学习·selenium·测试工具·pytest
寻星探路6 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https