请教大家,如何实现视频的采集然后进行h.264编码呢?

目前的思路是,通过Recorder框架进行采集,然后交给Codec框架进行h.264编码。请问这个思路对吗?又如何将采集的视频流直接作为编码的输入呢?
您需要先 登录 才能评论/回答

全部评论(13)
AVRecorder模块是将其他模块采集的数据编码封装成文件,最终用户只能获取到封装好的文件(如mp4)。
看问题描速你想拿到编码后的H264数据,可以参考https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/avcodec/video-encoding.md
如果主动注入原始数据,可以参考buffer输入模式;如果是调用系统API获取camera输入或录屏输入,可以参考surface输入模式,将OHNativeWindow设置给其他模块

2025-02-21 17:48:48
引用:“只是bin的话限制没那么多,想尽量调用上层提供的API,可以调用系统提供的Native接口 camera输入:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/camera/native-camera-recording.md 将获取的surfaceid换成从AVCodec视频编码模块获取的。 音频”
不会白白辛苦您的指导,有酬谢

引用:“只是bin的话限制没那么多,想尽量调用上层提供的API,可以调用系统提供的Native接口 camera输入:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/camera/native-camera-recording.md 将获取的surfaceid换成从AVCodec视频编码模块获取的。 音频”
请问可以加一下联系方式吗,我是一个备赛的大学生,具体的实施有些细节想请教您,非常感谢!。wx:f15172802361

引用:“只是bin的话限制没那么多,想尽量调用上层提供的API,可以调用系统提供的Native接口 camera输入:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/camera/native-camera-recording.md 将获取的surfaceid换成从AVCodec视频编码模块获取的。 音频”
好的,谢谢您!

引用:“可以的话我想尽量调用上层提供的API,因为对OpenHarmony了解不是很多,还请您多指教”
只是bin的话限制没那么多,想尽量调用上层提供的API,可以调用系统提供的Native接口 camera输入:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/camera/native-camera-recording.md 将获取的surfaceid换成从AVCodec视频编码模块获取的。 音频输入:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/audio/using-ohaudio-for-recording.md 视频编码:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/avcodec/video-encoding.md 音频编码:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/avcodec/audio-encoding.md 将这几个模块组合起来,不过如果你熟悉HDI的话直接调HDI接口组合也可

引用:“不是开发成JS应用吗?只是个bin文件吗,可以调用各模块的native接口或HDI接口或驱动SDK接口等,需要看需求”
可以的话我想尽量调用上层提供的API,因为对OpenHarmony了解不是很多,还请您多指教

引用:“不是开发成js的应用,我做的还是嵌入式的开发。确实只是一个bin文件来执行就行。目前想做的采集音频和视频再编码之后,通过一个协议(目前打算采用webrtc)推流,请问该如何去做呢?网上搜了资料感觉不知道哪个可以满足需求”
目前感觉可以的就是AVCodec的HDI接口

引用:“不是开发成JS应用吗?只是个bin文件吗,可以调用各模块的native接口或HDI接口或驱动SDK接口等,需要看需求”
不是开发成js的应用,我做的还是嵌入式的开发。确实只是一个bin文件来执行就行。目前想做的采集音频和视频再编码之后,通过一个协议(目前打算采用webrtc)推流,请问该如何去做呢?网上搜了资料感觉不知道哪个可以满足需求

实现视频采集并进行H.264编码的步骤,按照你提供的思路是正确的。在OpenHarmony中,可以使用@ohos.multimedia.media
模块中的AVRecorder
来采集视频,然后通过@ohos.media.codec
模块来进行H.264编码。以下是大致的开发流程:
-
采集视频:
- 首先,你需要创建一个
AVRecorder
实例,并设置录制配置(如分辨率、比特率等)。 - 使用
startRecording()
方法开始录制,确保将视频输出流与你的目标编码格式关联起来。
- 首先,你需要创建一个
-
获取视频数据:
- 录制过程中,你可以通过
AVRecorder
的回调获取到每一帧的YUV数据。这些数据可以作为H.264编码的输入。
- 录制过程中,你可以通过
-
H.264编码:
- 创建一个
OH_AVCodec
实例,并配置编码器以支持H.264(如MIME类型为OH_AVCODEC_MIMETYPE_VIDEO_H264
)。 - 使用
OH_AVFormat_Create()
创建一个格式描述,包含编码参数(如帧率、码率等)。 - 将采集到的YUV数据转换成H.264编码所需的格式,并添加到
OH_AVFormat
中。
- 创建一个
-
视频输出:
- 如果需要将编码后的数据写入文件或网络流,可以使用
OH_AVMuxer
来组合音频和视频轨,设置旋转角度(如果需要)。 - 使用
OH_AVMuxer_WritePacket()
方法将编码好的数据包写入到输出文件或流中。
- 如果需要将编码后的数据写入文件或网络流,可以使用
-
解码与播放:
- 如果你打算在其他地方播放这个编码后的H.264数据,可以使用
OH_VideoDecoder
来解码。确保正确配置解码器并调用OH_VideoDecoder_Prepare()
和OH_VideoDecoder_Start()
。
- 如果你打算在其他地方播放这个编码后的H.264数据,可以使用

2025-02-27 15:06:41

2025-02-24 10:31:22
查看全部13条回答/评论