赞
踩
一个读取、写入操作音视频文件编辑的工具。
1、通过IDE工具下载依赖SDK,Tools->SDK Manager->Openharmony SDK 把native选项勾上下载,API版本>=10
2、开发板选择RK3568,ROM下载地址. 选择开发板类型是rk3568,请使用最新的版本
3、下载源码
git clone https://gitee.com/openharmony-tpc/mp4parser.git --recurse-submodules
4、项目依赖FFmpeg库,关于FFmpeg的编译:FFmpeg源码基于版本号:n4.2.5. 请参考:OpenHarmony编译构建指导. 编译脚本参考详见目录:doc/
ohpm install @ohos/mp4parser
OpenHarmony ohpm
环境配置等更多内容,请参考如何安装 OpenHarmony ohpm 包
import {MP4Parser} from "@ohos/mp4parser"; import {ICallBack} from "@ohos/mp4parser"; /** * 视频合成 */ private videoMerge() { let getLocalDirPath = getContext(this).cacheDir+"/"; let that = this; let filePathOne = getLocalDirPath + "qqq.mp4"; let filePathTwo = getLocalDirPath + "www.mp4"; let outMP4 = getLocalDirPath + "mergeout.mp4"; var callBack: ICallBack = { callBackResult(code: number) { that.btnText = "视频合成点击执行" that.imageWidth = 0 that.imageHeight = 0 if (code == 0) { AlertDialog.show({ message: '执行成功' }) } else { AlertDialog.show({ message: '执行失败' }) } } } MP4Parser.videoMerge(filePathOne, filePathTwo, outMP4, callBack); }
import {MP4Parser} from "@ohos/mp4parser"; import {ICallBack} from "@ohos/mp4parser"; /** * 视频裁剪 */ private videoClip() { let getLocalDirPath = getContext(this).cacheDir+"/"; let that=this; let sTime = "00:00:10"; let eTime = "00:00:20"; let sourceMP4 = getLocalDirPath+"qqq.mp4"; let outMP4 = getLocalDirPath+"clipout.mp4"; var callBack: ICallBack = { callBackResult(code: number) { that.btnText="视频裁剪点击执行" that.imageWidth=0 that.imageHeight=0 if (code == 0) { AlertDialog.show({ message: '执行成功' }) } else { AlertDialog.show({ message: '执行失败' }) } } } MP4Parser.videoClip(sTime, eTime, sourceMP4, outMP4, callBack); }
import {MP4Parser} from "@ohos/mp4parser"; import {ICallBack} from "@ohos/mp4parser"; /** * 音频合成 */ private audioMerge() { let getLocalDirPath = getContext(this).cacheDir+"/"; let that = this; let filePathOne = getLocalDirPath + "a.mp3"; let filePathTwo = getLocalDirPath + "b.mp3"; let outPath = getLocalDirPath + "mergeout.mp3"; var callBack: ICallBack = { callBackResult(code: number) { console.log("mp4parser-->audioMerge--->end"); that.btnText = "音频合成点击执行" that.imageWidth = 0 that.imageHeight = 0 if (code == 0) { AlertDialog.show({ message: '执行成功' }) } else { AlertDialog.show({ message: '执行失败' }) } } } MP4Parser.audioMerge(filePathOne, filePathTwo, outPath, callBack); }
import {MP4Parser} from "@ohos/mp4parser"; import {ICallBack} from "@ohos/mp4parser"; /** * 音频裁剪 */ private audioClip() { let getLocalDirPath = getContext(this).cacheDir+"/"; let that = this; let sTime = "00:00:00"; let eTime = "00:00:10"; let sourcePath = getLocalDirPath + "a.mp3"; let outPath = getLocalDirPath + "clipout.mp3"; var callBack: ICallBack = { callBackResult(code: number) { that.btnText = "音频裁剪点击执行" that.imageWidth = 0 that.imageHeight = 0 if (code == 0) { AlertDialog.show({ message: '执行成功' }) } else { AlertDialog.show({ message: '执行失败' }) } } } MP4Parser.audioClip(sTime, eTime, sourcePath, outPath, callBack); }
import {MP4Parser} from "@ohos/mp4parser"; import {ICallBack} from "@ohos/mp4parser"; /** * 视频批量合成 */ private videoMultMerge() { let that = this; let getLocalDirPath = getContext(this).cacheDir+"/"; let filePath = getLocalDirPath + "mergeList.txt"; let outMP4 = getLocalDirPath + "mergeout3.mp4"; var callBack: ICallBack = { callBackResult(code: number) { that.btnText2 = "视频合成点击执行" that.imageWidth = 0 that.imageHeight = 0 if (code == 0) { AlertDialog.show({ message: '执行成功' }) } else { AlertDialog.show({ message: '执行失败' }) } } } MP4Parser.videoMultMerge(filePath, outMP4, callBack); }
import {MP4Parser} from "@ohos/mp4parser"; import {ICallBack} from "@ohos/mp4parser"; /** * 音频批量合成 */ private audioMultMerge() { let getLocalDirPath = getContext(this).cacheDir+"/"; let that = this; let filePath = getLocalDirPath + "mergewavList.txt"; let outPath = getLocalDirPath + "mergeout3.wav"; var callBack: ICallBack = { callBackResult(code: number) { that.btnText2 = "音频合成点击执行" that.imageWidth = 0 that.imageHeight = 0 if (code == 0) { AlertDialog.show({ message: '执行成功' }) } else { AlertDialog.show({ message: '执行失败' }) } } } MP4Parser.audioMultMerge(filePath, outPath, callBack); }
import {ICallBack, IFrameCallBack, MP4Parser} from "@ohos/mp4parser"; private getFrameAtTimeRang() { let getLocalDirPath = getContext(this).cacheDir + "/"; let sourceMP4 = getLocalDirPath + "www.mp4"; let that = this; var callBack: ICallBack = { callBackResult(code: number) { if (code == 0) { var frameCallBack: IFrameCallBack = { async callBackResult(data: ArrayBuffer, timeUs: number) { const imageSource = image.createImageSource(data) that.imagePixelMap = await imageSource.createPixelMap() } } MP4Parser.getFrameAtTimeRang("1000000", "9000000", MP4Parser.OPTION_CLOSEST, frameCallBack); } } } MP4Parser.setDataSource(sourceMP4, callBack); }
let context = AbilityDelegatorRegistry.getAbilityDelegator().getAppContext()
let getLocalDirPath = context.cacheDir + "/";
let sTime = "00:00:01";
let eTime = "00:00:02";
let sourceMP4 = getLocalDirPath + "testvideo.mp4";
let outMP4 = getLocalDirPath + "out.mp4";
let callBack: ICallBack = {
callBackResult(code: number) {
expect(0).assertEqual(code)
done()
}
}
MP4Parser.ffmpegCmd("ffmpeg -y -i " + sourceMP4 + " -ss " + sTime + " -c copy -to " + eTime + " " + outMP4, callBack)
import {MP4Parser} from "@ohos/mp4parser";
MP4Parser.videoMerge()
MP4Parser.videoClip()
MP4Parser.videoMultMerge()
MP4Parser.audioMerge()
MP4Parser.audioClip()
MP4Parser.audioMultMerge()
MP4Parser.setDataSource()
MP4Parser.getFrameAtTimeRang()
MP4Parser.stopGetFrame()
MP4Parser.ffmpegCmd()
在下述版本验证通过:
DevEco Studio版本: 4.0 Release(4.0.3.413), SDK: (4.0.10.3)
DevEco Studio 版本: 4.1 Canary(4.1.3.317),OpenHarmony SDK: API11 (4.1.0.36)
|---- mp4parser
| |---- entry # 示例代码文件夹
| |---- library # mp4parser库文件夹
| |---- MP4Parser.ets # 对外接口
| |---- README.MD # 安装使用方法
为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05
https://qr21.cn/FV7h05
https://qr21.cn/FV7h05
https://qr21.cn/FV7h05
https://qr18.cn/F781PH
https://qr18.cn/F781PH
1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。