[ 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 模式:url为NULL,调用方需通过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);
拍照完成后关闭录制器。
参数:
handle由media_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_open、on_event、on_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_connectionBUFFER 模式下接收可写入数据的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。