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()