[ English | 简体中文 ]

多媒体录制器 API

音视频录制功能,支持文件录制和缓冲模式。

头文件:#include <media_recorder.h>

openvela 实现说明

  • 同步/异步双模型media_recorder_*(同步)和 media_uv_recorder_*(异步,基于 libuv)
  • 输出方式:支持两种目标
    • 本地文件:通过 prepare(url) 指定路径
    • 字节流缓冲:通过 read_data 读取,或 get_socket 获取底层套接字
  • 拍照:除音视频录制外,提供 take_picture / start_picture / finish_picture 图片捕获接口
  • 事件回调:通过 set_event_callback 注册事件监听器

同步接口 - 生命周期

media_recorder_open

void* media_recorder_open(const char* params);

打开指定源类型的录制器。

参数

  • params 源类型常量,通常为 MEDIA_SOURCE_MIC

返回值

成功时返回录制器句柄,失败时返回 NULL

media_recorder_close

int media_recorder_close(void* handle);

关闭录制器。

参数

  • handle 录制器句柄。

返回值

成功时返回 0,失败时返回负的 errno。

media_recorder_set_event_callback

int media_recorder_set_event_callback(void* handle, void* cookie, media_event_callback event_cb);

设置录制器事件回调,当状态变化或发生用户关注的事件时触发回调。

参数

  • handle 录制器句柄。
  • cookie 用户数据,在 event_cb 触发时回传给用户。
  • event_cb 事件回调函数。

返回值

成功时返回 0,失败时返回负的 errno。

media_recorder_prepare

int media_recorder_prepare(void* handle, const char* url, const char* options);

准备录制器。

参数

  • handle 录制器句柄。
  • url 资源路径,支持两种模式:1. URL 模式:url 为本地文件路径,框架会打开并录制到该路径;2. BUFFER 模式:urlNULL,调用方需通过 media_recorder_read_data()media_recorder_get_socket() + read() 持续接收数据。
  • options 额外配置参数,字段包括:format(封装格式,如 opus/wav)、sample_rate(采样率)、ch_layout(声道布局)、b(比特率,如 "23900")、vbr(0=固定码率,1=可变码率)、level(编码复杂度,0-10,默认 10)。示例:"format=opusraw:sample_rate=16000:ch_layout=mono:b=32000:vbr=0:level=1"

返回值

成功时返回 0,失败时返回负的 errno。

media_recorder_reset

int media_recorder_reset(void* handle);

重置录制器到初始状态。

参数

  • handle 录制器句柄。

返回值

成功时返回 0,失败时返回负的错误码。

同步接口 - 数据流

media_recorder_read_data

ssize_t media_recorder_read_data(void* handle, void* data, size_t len);

从录制器读取录制数据。

参数

  • handle 录制器句柄。
  • data 数据缓冲区地址。
  • len 要读取的数据长度(字节)。

返回值

成功时返回读取的字节数,失败时返回负的错误码。

media_recorder_get_sockaddr

int media_recorder_get_sockaddr(void* handle, struct sockaddr_storage* addr);

获取缓冲模式的 Socket 地址信息。

参数

  • handle 录制器句柄。
  • addr 用于存储 Socket 地址信息的输出参数。

返回值

成功时返回 0,失败时返回负的错误码。

media_recorder_get_socket

int media_recorder_get_socket(void* handle);

获取用于读取的 Socket 文件描述符。

参数

  • handle 录制器句柄。

返回值

成功时返回 Socket 文件描述符,失败时返回负的错误码。

media_recorder_close_socket

void media_recorder_close_socket(void* handle);

关闭录制器数据接收完成后的 Socket 文件描述符。

参数

  • handle 录制器句柄。

同步接口 - 录制控制

media_recorder_start

int media_recorder_start(void* handle);

开始或恢复录制。

参数

  • handle 录制器句柄。

返回值

成功时返回 0,失败时返回负的错误码。

media_recorder_pause

int media_recorder_pause(void* handle);

暂停录制。

参数

  • handle 录制器句柄。

返回值

成功时返回 0,失败时返回负的错误码。

media_recorder_stop

int media_recorder_stop(void* handle);

停止录制。

参数

  • handle 录制器句柄。

返回值

成功时返回 0,失败时返回负的错误码。

同步接口 - 属性

media_recorder_set_property

int media_recorder_set_property(void* handle, const char* target, const char* key, const char* value);

设置录制器属性。

参数

  • handle 录制器句柄。
  • target 目标 filter 名称。
  • key 属性键名。
  • value 属性值。

返回值

成功时返回 0,失败时返回负的 errno。

media_recorder_get_property

int media_recorder_get_property(void* handle, const char* target, const char* key, char* value, int value_len);

获取录制器属性。

参数

  • handle 录制器句柄。
  • target 目标 filter 名称。
  • key 属性键名。
  • value 输出缓冲区,用于存储属性值。
  • value_len 输出缓冲区长度。

返回值

成功时返回 0,失败时返回负的 errno。

同步接口 - 图片捕获

media_recorder_take_picture

int media_recorder_take_picture(char* params, char* filename, size_t number);

从摄像头拍照。

参数

  • params 相机打开路径参数。
  • filename 新图片的存储路径。
  • number 拍摄图片的数量。

返回值

成功时返回 0,失败时返回负的 errno。

media_recorder_start_picture

void* media_recorder_start_picture(char* params, char* filename, size_t number, media_event_callback event_cb, void* cookie);

开始拍照,内部依次执行打开、设置事件回调、准备和启动操作。

参数

  • params 打开参数。
  • filename 新图片的存储路径。
  • number 拍摄图片的数量。
  • event_cb 处理状态反馈的回调函数。
  • cookie 用户私有数据。

返回值

成功时返回有效句柄,失败时返回 NULL

media_recorder_finish_picture

int media_recorder_finish_picture(void* handle);

拍照完成后关闭录制器。

参数

  • handlemedia_recorder_start_picture() 返回的录制器句柄。

返回值

成功时返回 0,失败时返回负的错误码。

异步接口(基于 libuv)

以下接口仅在启用 CONFIG_LIBUV 时可用。

media_uv_recorder_open

void* media_uv_recorder_open(void* loop, const char* source, media_uv_callback on_open, void* cookie);

打开异步录制器。

参数

  • loop 当前线程的 uv_loop_t* 事件循环句柄。
  • source 源类型。
  • on_open 打开完成后触发的回调函数。
  • cookie 回调上下文,供 on_openon_eventon_close 共用。

返回值

成功时返回录制器句柄,失败时返回 NULL

media_uv_recorder_listen

int media_uv_recorder_listen(void* handle, media_event_callback on_event);

注册事件监听回调,接收录制状态变化通知。

参数

  • handle 异步录制器句柄。
  • on_event 事件回调函数,在收到通知后调用。

返回值

成功时返回 0,失败时返回负的 errno。

media_uv_recorder_close

int media_uv_recorder_close(void* handle, media_uv_callback on_close);

关闭异步录制器。

参数

  • handle 异步录制器句柄。
  • on_close 资源释放完成后触发的回调函数。

返回值

成功时返回 0,失败时返回负的 errno。

media_uv_recorder_prepare

int media_uv_recorder_prepare(void* handle, const char* url, const char* options, media_uv_object_callback on_connection, media_uv_callback on_prepare, void* cookie);

准备录制目标文件。

参数

  • handle 异步录制器句柄。
  • url 目标路径。
  • options 目标配置参数,详见 media_recorder_prepare
  • on_connection BUFFER 模式下接收可写入数据的 uv_pipe_t 的回调函数。
  • on_prepare 准备完成后的结果回调函数。
  • cookie 回调上下文参数。

返回值

成功时返回 0,失败时返回负的 errno。

media_uv_recorder_start_auto

int media_uv_recorder_start_auto(void* handle, const char* stream, media_uv_callback on_start, void* cookie);

开始或恢复录制,并自动请求音频焦点。

参数

  • handle 异步录制器句柄。
  • scenario 场景常量(定义在 media_defs.h 中)。
  • on_start 录制开始后的结果回调函数。
  • cookie 回调上下文参数。

返回值

成功时返回 0,失败时返回负的 errno。

media_uv_recorder_start

int media_uv_recorder_start(void* handle, media_uv_callback on_start, void* cookie);

开始或恢复录制。

参数

  • handle 异步录制器句柄。
  • on_start 录制开始后的结果回调函数。
  • cookie 回调上下文参数。

返回值

成功时返回 0,失败时返回负的 errno。

media_uv_recorder_pause

int media_uv_recorder_pause(void* handle, media_uv_callback on_pause, void* cookie);

暂停录制。

参数

  • handle 异步录制器句柄。
  • on_pause 暂停完成后的结果回调函数。
  • cookie 回调上下文参数。

返回值

成功时返回 0,失败时返回负的 errno。

media_uv_recorder_stop

int media_uv_recorder_stop(void* handle, media_uv_callback on_stop, void* cookie);

停止录制并完成目标文件写入。

参数

  • handle 异步录制器句柄。
  • on_stop 停止完成后的结果回调函数。
  • cookie 回调上下文参数。

返回值

成功时返回 0,失败时返回负的 errno。

media_uv_recorder_set_property

int media_uv_recorder_set_property(void* handle, const char* target, const char* key, const char* value, media_uv_callback cb, void* cookie);

设置录制器属性。

参数

  • handle 异步录制器句柄。
  • target 目标 filter 名称。
  • key 属性键名。
  • value 属性值。
  • cb 设置完成后的结果回调函数。
  • cookie 回调上下文参数。

返回值

成功时返回 0,失败时返回负的 errno。

media_uv_recorder_get_property

int media_uv_recorder_get_property(void* handle, const char* target, const char* key, media_uv_string_callback cb, void* cookie);

获取录制器属性。

参数

  • handle 异步录制器句柄。
  • target 目标 filter 名称。
  • key 属性键名。
  • cb 结果回调函数,回调参数为属性值字符串。
  • cookie 回调上下文参数。

返回值

成功时返回 0,失败时返回负的 errno。

media_uv_recorder_reset

int media_uv_recorder_reset(void* handle, media_uv_callback on_reset, void* cookie);

重置录制器,清除当前录制内容以准备新的录制。

参数

  • handle 异步录制器句柄。
  • on_reset 重置完成后的结果回调函数。
  • cookie 回调上下文参数。

返回值

成功时返回 0,失败时返回负的 errno。

media_uv_recorder_take_picture

int media_uv_recorder_take_picture(void* loop, char* params, char* filename, size_t number, media_uv_callback on_complete, void* cookie);

从摄像头异步拍照。

参数

  • loop 当前线程的 uv_loop_t* 事件循环句柄。
  • params 相机打开路径参数。
  • filename 新图片的存储路径。
  • number 拍摄图片的数量。
  • on_complete 拍照完成后的结果回调函数。
  • cookie 回调上下文参数。

返回值

成功时返回 0,失败时返回负的 errno。