3.7 MP4 模块API手册#

前言#

概述#

本文档主要介绍K230_CanMV MP4模块API的使用

读者对象#

本文档(本指南)主要适用于以下人员:

  • 技术支持工程师

  • 软件开发工程师

缩略词定义#

简称

说明

xxx

xx

XXX

xx

修订记录#

文档版本号

修改说明

修改者

日期

V1.0

初版

郭玉会

2023-09-19

1. 概述#

此文档介绍K230_CanMV MP4模块API,MP4模块用来生成MP4文件,开发者不需要关注底层细节,只需要调用提供的API即可生成不同编码格式、不同视频分辨率的MP4文件。

2. API描述#

提供MP4Container类,该类提供如下方法:

2.1 MP4Container.Create#

【描述】

创建MP4Container

【语法】

MP4Container.Create(mp4Cfg)

【参数】

参数名称

描述

输入/输出

mp4cfg

MP4Contianer配置

输入

【返回值】

返回值

描述

0

成功

非 0

失败

【注意】 无

【举例】

【相关主题】

2.2 MP4Container.Start#

【描述】

MP4Container开始处理数据

【语法】

MP4Container.Start()

【参数】

【返回值】

返回值

描述

0

成功

非0

失败

【注意】

【举例】

2.3 MP4Container.Process#

【描述】

写入一帧音/视频数据到MP4

【语法】

MP4Container.Process()

【参数】

【返回值】

返回值

描述

0

成功

非0

失败

【注意】

【举例】

2.4 MP4Container.Stop#

【描述】

MP4Container停止处理数据

【语法】

MP4Container.Stop()

【参数】

【返回值】

返回值

描述

0

成功

非0

失败

【注意】

【举例】

2.5 MP4Container.Destroy#

【描述】

销毁创建的MP4Container

【语法】

MP4Container.Destroy()

【参数】

【返回值】

返回值

描述

0

成功

非0

失败

【注意】

【举例】

3. 数据结构描述#

3.1 Mp4CfgStr#

【说明】

MP4Container配置属性

【定义】

class Mp4CfgStr:
    def __init__(self, type):
        self.type = type
        self.muxerCfg = MuxerCfgStr()

    def SetMuxerCfg(self, fileName, videoPayloadType, picWidth, picHeight, audioPayloadType, fmp4Flag = 0):
        self.muxerCfg.file_name = fileName
        self.muxerCfg.video_payload_type = videoPayloadType
        self.muxerCfg.pic_width = picWidth
        self.muxerCfg.pic_height = picHeight
        self.muxerCfg.audio_payload_type = audioPayloadType
        self.muxerCfg.fmp4_flag = fmp4Flag

【成员】

成员名称

描述

type

MP4Container类型:muxer/demuxer,目前只支持muxer

muxerCfg

muxer配置

【注意事项】

【相关数据类型及接口】

MP4Container.Create

3.2 MuxerCfgStr#

【说明】

MP4Container Muxer类型配置属性

【定义】

class MuxerCfgStr:
    def __init__(self):
        self.file_name = 0
        self.video_payload_type = 0
        self.pic_width = 0
        self.pic_height = 0
        self.audio_payload_type = 0

【成员】

成员名称

描述

filename

生成的MP4文件名

video_payload_type

视频编码格式

pic_width

视频帧宽

pic_height

视频帧高

audio_payload_type

音频编码格式

【注意事项】

【相关数据类型及接口】

MP4Container.Create

3.3 MP4Container类型#

【说明】

MP4Container类型枚举

【成员】

成员名称

描述

MP4_CONFIG_TYPE_MUXER

muxer类型

MP4_CONFIG_TYPE_DEMUXER

demuxer类型,目前不支持

3.4 video_payload_type#

【说明】

视频编码类型

【成员】

成员名称

描述

MP4_CODEC_ID_H264

h264视频编码类型

MP4_CODEC_ID_H265

h265视频编码类型

3.5 audio_payload_type#

【说明】

音频编码类型

【成员】

成员名称

描述

MP4_CODEC_ID_G711U

g711u音频编码类型

MP4_CODEC_ID_G711A

g711a音频编码类型

4. 示例程序#

4.1 例程1#


from media.mp4format import *
import os

def canmv_mp4_muxer_test():
    print("mp4_muxer_test start")
    width = 1280
    height = 720
    # 实例化mp4 container
    mp4_muxer = Mp4Container()
    mp4_cfg = Mp4CfgStr(mp4_muxer.MP4_CONFIG_TYPE_MUXER)
    if mp4_cfg.type == mp4_muxer.MP4_CONFIG_TYPE_MUXER:
        file_name = "/sdcard/app/tests/test.mp4"
        mp4_cfg.SetMuxerCfg(file_name, mp4_muxer.MP4_CODEC_ID_H265, width, height, mp4_muxer.MP4_CODEC_ID_G711U)
    # 创建mp4 muxer
    mp4_muxer.Create(mp4_cfg)
    # 启动mp4 muxer
    mp4_muxer.Start()

    frame_count = 0
    try:
        while True:
            os.exitpoint()
            # 处理音视频数据,按MP4格式写入文件
            mp4_muxer.Process()
            frame_count += 1
            print("frame_count = ", frame_count)
            if frame_count >= 200:
                break
    except BaseException as e:
        print(e)
    # 停止mp4 muxer
    mp4_muxer.Stop()
    # 销毁mp4 muxer
    mp4_muxer.Destroy()
    print("mp4_muxer_test stop")

canmv_mp4_muxer_test()