媒体库内支持组件:
- USB 摄像头组件
- RK 编码器组件
- MP4 封装组件
- STREAM_MEDIA 流媒体组件
build目录下寻找对应的CMake脚本
- 编译arm linux使用build/arm-linux/build_arm_linux.sh cd build/arm-linux ./build_arm_linux.sh
- 编译64位aarch linux使用build/aarch-linux/build_aarch_linux.sh cd build/aarch-linux ./build_aarch_linux.sh
生成的库在src目录下 librkmedia.so
头文件目录在顶层目录下的include
demo目录:顶层目录/demo
暂时只支持C++接口 后续会封装C接口
-
USB 摄像头组件 数据结构 :camera_buf : 摄像头采集buffer
typedef struct {
void *data;
int dataLen;struct v4l2_buffer vbuf;
int bufIndex;
}CameraBuf;-
初始化 int Init(const char *dev, unsigned int fmt, int w, int h); 传入usb摄像头的设备路径 如/dev/video0 fmt是v4l2采集格式 如V4L2_PIX_FMT_YUYV V4L2_PIX_FMT_NV12等 以及传入宽高
如果摄像头不支持所设定的格式和宽高 会报错退出 需要根据所用的摄像头自行调整 -
int Deinit(); 退出摄像头组件
-
int GetFrame(CameraBuf *buf); 从摄像头获取一帧 数据保存在camera_buf的data指针中
-
int FreeFrame(CameraBuf *buf); 释放获取的摄像头帧
-
-
RK 编码器组件
- 初始化 MPP_RET Init(int w, int h, MppFrameFormat fmt); 传入宽高和输入格式 格式要和选用的摄像头格式对应
- MPP_RET Deinit(); 退出编码器组件
- MPP_RET GetSpsPps(unsigned char **data, int *data_size); 获取编码器生成的的sps和pps
- MPP_RET MPP_RET Encode(RK_U8 *data, RK_U32 dataSize, MppPacket *pkt); 编码一帧
-
MP4 封装组件
- int CreateMP4File(const char *file, int w, int h, int time_scale, int frm_rate); 创建mp4文件 需要指定文件名
- void CloseMP4File(); 关闭mp4文件
- int WriteSPSandPPS(unsigned char *sps_pps, int data_size); 写入sps和pps
- int WriteNalu(unsigned char *nalu_data, int nalu_size); 写入一帧h264 nalu
-
STREAM_MEDIA 流媒体组件
- int InitRTProtocol(const char *ip, int port); 初始化 需要传入rtp地址和端口
- int DeinitRTProtocol 退出流媒体组件
- int SendRtpPacket(const uint8_t *nalu, uint32_t nalu_size); 发送一帧h264