1. 如果您想自己加工视频数据
有些研发能力比较强的客户,会有自定义图像处理的需求(比如自定义图像滤镜),同时又希望复用rtmp sdk的整体流程,如果是这样,您可以按照如下攻略进行定制。
-
Step1. 实现一个图像处理的so
您需要自己实现一个so,比如test.so,然后按照如下定义导出一个C风格的函数,之所以强制使用C而不是java是因为图像处理的效率C和C++比较容易胜任。您实现的PVideoProcessHookFunc 处理时间不能过长,试想,如果该函数的处理时间超过50ms,那就意味着SDK推出的视频流,其帧率不可能达到20FPS。/* @brief 客户自定义的视频预处理函数原型 * @param yuv_buffer:视频YUV数据,格式固定是YUV420 Planar * @param len_buffer:数据长度 * @param width: 视频width * @param height: 视频height * @return * @remark (1)该函数会被SDK同步调用,故您需要同步返回预处理后的数据 * (2)处理后的数据长度必须和处理前保持一致 * (3)您或者直接处理yuv_buffer,或者将处理后的数据memcpy到yuv_buffer所指的内存区域, * 这块内存的生命期由SDK负责管理(也就是释放) */ typedef void (*PVideoProcessHookFunc)(unsigned char * yuv_buffer, int len_buffer, int width, int height);
-
Step2. 设置 setCustomModeType + setCustomVideoPreProcessLibrary
它们是位于PushConfig中的两个设置项:
setCustomModeType设置项用来声明“您希望自定义滤镜”,setCustomVideoPreProcessLibrary用来指定您自己的so的文件路径以及导出函数的名字。