讨论广场 问答详情
请教大家,如何实现视频的采集然后进行h.264编码呢?
Mr. Brownstone 2025-02-21 17:33:05
158 评论 分享

目前的思路是,通过Recorder框架进行采集,然后交给Codec框架进行h.264编码。请问这个思路对吗?又如何将采集的视频流直接作为编码的输入呢?

158 评论 分享
写回答
全部评论(13)
1 楼

AVRecorder模块是将其他模块采集的数据编码封装成文件,最终用户只能获取到封装好的文件(如mp4)。

看问题描速你想拿到编码后的H264数据,可以参考https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/avcodec/video-encoding.md
如果主动注入原始数据,可以参考buffer输入模式;如果是调用系统API获取camera输入或录屏输入,可以参考surface输入模式,将OHNativeWindow设置给其他模块

1
2025-02-21 17:48:48
2025-02-21 20:01:57
引用:“只是bin的话限制没那么多,想尽量调用上层提供的API,可以调用系统提供的Native接口 camera输入:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/camera/native-camera-recording.md 将获取的surfaceid换成从AVCodec视频编码模块获取的。 音频”
不会白白辛苦您的指导,有酬谢
2025-02-21 20:01:57
2025-02-21 19:58:45
引用:“只是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
2025-02-21 19:58:45
2025-02-21 19:18:36
引用:“只是bin的话限制没那么多,想尽量调用上层提供的API,可以调用系统提供的Native接口 camera输入:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/camera/native-camera-recording.md 将获取的surfaceid换成从AVCodec视频编码模块获取的。 音频”
好的,谢谢您!
2025-02-21 19:18:36
2025-02-21 19:10:16
引用:“可以的话我想尽量调用上层提供的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接口组合也可
2025-02-21 19:10:16
2025-02-21 18:48:25
引用:“不是开发成JS应用吗?只是个bin文件吗,可以调用各模块的native接口或HDI接口或驱动SDK接口等,需要看需求”
可以的话我想尽量调用上层提供的API,因为对OpenHarmony了解不是很多,还请您多指教
2025-02-21 18:48:25
2025-02-21 18:40:56
引用:“不是开发成js的应用,我做的还是嵌入式的开发。确实只是一个bin文件来执行就行。目前想做的采集音频和视频再编码之后,通过一个协议(目前打算采用webrtc)推流,请问该如何去做呢?网上搜了资料感觉不知道哪个可以满足需求”
目前感觉可以的就是AVCodec的HDI接口
2025-02-21 18:40:56
2025-02-21 18:38:05
引用:“不是开发成JS应用吗?只是个bin文件吗,可以调用各模块的native接口或HDI接口或驱动SDK接口等,需要看需求”
不是开发成js的应用,我做的还是嵌入式的开发。确实只是一个bin文件来执行就行。目前想做的采集音频和视频再编码之后,通过一个协议(目前打算采用webrtc)推流,请问该如何去做呢?网上搜了资料感觉不知道哪个可以满足需求
2025-02-21 18:38:05
2025-02-21 18:08:41
引用:“请问是使用AVCodec的HDI进行开发吗?”
不是开发成JS应用吗?只是个bin文件吗,可以调用各模块的native接口或HDI接口或驱动SDK接口等,需要看需求
2025-02-21 18:08:41
2025-02-21 18:00:03
请问是使用AVCodec的HDI进行开发吗?
2025-02-21 18:00:03
2025-02-21 17:57:03
您好,我做的是南向的设备开发。您建议我是使用哪一块内容去做呢,是使用AVCodec吗?
2025-02-21 17:57:03
3 楼

实现视频采集并进行H.264编码的步骤,按照你提供的思路是正确的。在OpenHarmony中,可以使用@ohos.multimedia.media模块中的AVRecorder来采集视频,然后通过@ohos.media.codec模块来进行H.264编码。以下是大致的开发流程:

  1. 采集视频

    • 首先,你需要创建一个AVRecorder实例,并设置录制配置(如分辨率、比特率等)。
    • 使用startRecording()方法开始录制,确保将视频输出流与你的目标编码格式关联起来。
  2. 获取视频数据

    • 录制过程中,你可以通过AVRecorder的回调获取到每一帧的YUV数据。这些数据可以作为H.264编码的输入。
  3. H.264编码

    • 创建一个OH_AVCodec实例,并配置编码器以支持H.264(如MIME类型为OH_AVCODEC_MIMETYPE_VIDEO_H264)。
    • 使用OH_AVFormat_Create()创建一个格式描述,包含编码参数(如帧率、码率等)。
    • 将采集到的YUV数据转换成H.264编码所需的格式,并添加到OH_AVFormat中。
  4. 视频输出

    • 如果需要将编码后的数据写入文件或网络流,可以使用OH_AVMuxer来组合音频和视频轨,设置旋转角度(如果需要)。
    • 使用OH_AVMuxer_WritePacket()方法将编码好的数据包写入到输出文件或流中。
  5. 解码与播放

    • 如果你打算在其他地方播放这个编码后的H.264数据,可以使用OH_VideoDecoder来解码。确保正确配置解码器并调用OH_VideoDecoder_Prepare()OH_VideoDecoder_Start()
2025-02-27 15:06:41
查看全部13条回答/评论