Repository navigation
Replies: 2 comments
|
鸿蒙目前没有“导出视频”的现成 API,libpag 各端(Android / iOS / 鸿蒙)都是一样的:SDK 只负责渲染,视频编码需要业务侧接系统能力。 鸿蒙上可行的做法是“逐帧渲染 + 系统编码器”:
我们在一台 HarmonyOS 6.1(API 24)真机上把这条链路跑通了,输出 800×800、30fps、150 帧的 mp4,帧数和时长都正确。 几个必须注意的点:
如果对导出速度有要求,还有一条更快的路径:把 PAG 直接渲染到编码器的输入 surface( 如果你的场景只是播放 PAG 里内嵌的视频素材,这个是 SDK 内置支持的,鸿蒙端硬件解码和软件解码都可用,不需要额外处理。 Android 的同类实现可以参考 issue #2142 里的 MediaCodec 示例。 |
0 replies
Answer selected by
CodeJhF
|
好的好的,感谢🙏
”倾べ地落葉ヾ可̖⃢̖⃢̖
***@***.***
|
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
鸿蒙目前没有“导出视频”的现成 API,libpag 各端(Android / iOS / 鸿蒙)都是一样的:SDK 只负责渲染,视频编码需要业务侧接系统能力。
鸿蒙上可行的做法是“逐帧渲染 + 系统编码器”:
PAGSurface.MakeOffscreen(width, height)创建离屏 surfacePAGPlayer绑定该 surface,逐帧setProgress(i / totalFrames)+flush()surface.readPixels(ColorType::RGBA_8888, AlphaType::Premul, ...)取当前帧,转成 NV12OH_VideoEncoder用 buffer 模式(OH_MD_KEY_PIXEL_FORMAT设为AV_PIXEL_FORMAT_NV12)编码 H.264OH_AVMuxer封装成 mp4我们在一台 HarmonyOS 6.1(API 24)真机上把这条链路跑通了,输出 800×800、30fps、150 帧的 mp4,帧数和时长都正确。
几个必须注意的点:
OH_AVMuxer_AddTrack的 format 必须带OH_MD_KEY_CODEC_MIME(video/avc),否则返回AV_ERR_INVALID_VALmedia.createVi…