HarmonyOS 鸿蒙Next 音视频边录制边播放,视频文件分段读取后分段写入另一个文件失败
HarmonyOS 鸿蒙Next 音视频边录制边播放,视频文件分段读取后分段写入另一个文件失败
实际业务场景是将一个视频文件分段读取后上传至服务器。直接读取整个视频文件上传时正常,但通过分段读取的方式,将数据写入mp4文件中后无法播放(核心代码参考关联ir单)。分段读取时要对offset参数如何处理,分段场景应如何实现?
2 回复
请参考如下代码:
let blockLength = 1024 * 500
let position = 0
let readFile = fs.openSync(videoFilename, fs.OpenMode.READ_ONLY)
let mBlock = getBlock(position, fileSize, readFile, blockLength)
export function copyFile(position: number, fileSize: number, mBlock: ArrayBuffer, blockLength: number) {
let filePath = FileUtil.getCacheDirPath() + "/test.mp4";
let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
fs.write(file.fd, mBlock, {offset: position}).then((writeLen: number) => {
console.info("write data to file succeed and size is:" + writeLen);
position += mBlock.byteLength
mBlock = getBlock(position, fileSize, readFile, blockLength)
if (mBlock.byteLength > 0) {
copyFile(position, fileSize, mBlock, blockLength)
} else {
fs.closeSync(readFile);
}
}).catch((err: BusinessError) => {
console.error("write data to file failed with error message: " + err.message + ", error code: " + err.code);
}).finally(() => {
fs.closeSync(file);
});
}
function getBlock(position: number, totalSize: number, readFile: file, blockSize: number): ArrayBuffer {
let result: ArrayBuffer = new ArrayBuffer(Math.min(totalSize-position, blockSize))
fs.readSync(readFile.fd, result, {offset: position})
return result
}
更多关于HarmonyOS 鸿蒙Next 音视频边录制边播放,视频文件分段读取后分段写入另一个文件失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
针对HarmonyOS 鸿蒙Next中音视频边录制边播放,以及视频文件分段读取后分段写入另一个文件失败的问题,以下是一些专业解答:
-
音视频边录制边播放:
- HarmonyOS NEXT支持使用MediaPlayer和MediaRecorder类实现音视频的播放和录制功能。
- 如需边录制边播放,可考虑利用多线程或异步处理,确保录制和播放不会相互干扰。
-
视频文件分段读取后分段写入失败:
- 分段读取和写入时,需确保每个分段的offset和length正确设置,以维持数据的完整性和连续性。
- 写入时,应使用正确的文件打开模式和写入方法,如使用FileOutputStream的write方法,并传入正确的参数。
- 检查文件系统或存储设备是否存在问题,确保有足够的存储空间。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。