在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:Camkit开源软件地址:https://gitee.com/andyspider/Camkit开源软件介绍:急需维护者!!最近有很多小伙伴在使用上遇到了问题,尤其是no encode错误频发。苦于作者时间精力有限,并且手上也没有最新的树莓派来测试,无法再维护本项目了。希望有哪个小伙伴能帮忙维护项目,方便更多的派友使用摄像头!有意向请邮我: Camkit (Camera toolKit)Camkit是一个摄像头相关的工具箱,使用C语言写成,包含了从:图像采集-->色彩转换-->H264编码-->RTP打包-->网络发送的全套接口。 可到项目附件中下载已编译好的二进制版本。 编译Camkit采用cmake构建系统,编译之前请确认已经安装了cmake。 遵循以下步骤完成编译和安装: ```shellcd Camkit_source_dirmkdir buildcd buildcmake ../ -Dkey=valuemakemake install``` 其中**-Dkey=value**是可以配置的选项,支持的选项如下: 1. DEBUG=ON|OFF,是否打开调试选项2. PLAT=FSL|RPI|PC, 选择所使用的平台(Freescale IMX, Raspberry Pi或PC),具体见下文3. CMAKE_TOOLCHAIN_FILE=cross_file,用于交叉编译,具体见下文 Camkit的视频采集采用标准的V4L接口,通常的USB摄像头均可以支持。 Camkit的色彩转换和H264编码支持三种平台,分别是是: 1. PC Desktop(采用ffmpeg编码,依赖于ffmpeg中的libavutil、libavcodec和libswscale库)2. Raspberry Pi (采用GPU加速,依赖于vcos,vcsm, bcm_host, openmaxil等库)3. Freescale I.MX6 (采用IPU和VPU硬编码,依赖于ipu和vpu) PC平台编译安装使用ffmpeg编码,Camkit可以在PC上使用,原则上应该是跨平台的,但由于作者的开发主要是在Linux上完成,其他平台未经测试,今后有时间再做移植。下面主要介绍如何在Linux上编译安装。 在Linux上编译安装非常简单,以Ubuntu为例,首先安装编译环境: ```sudo apt-get install cmake libavcodec54 libavcodec-dev libswscale2 libswscale-dev libavutil52 libavutil-dev #库的版本号可有会有变化,请根据不同的系统做调整``` 然后遵循上面的构建步骤,使用如下命令构建和编译: ```mkdir buildcd buildcmake ../make make install``` 安装完成将在你的电脑上创建3种文件:1. 树莓派平台编译安装要在树莓派上使用可以选择在PC上交叉编译,也可将源代码拷到树莓派上直接编译,这里介绍后一种方式。 首先用 使用GPU加速需要一些头文件和库,这些库一般都在 编译过程非常简单,进入Camkit源码目录,使用如下命令编译安装: ``` mkdir buildcd buildcmake ../ -DPLAT=RPImake make install``` 这样,Camkit就已经安装到你的树莓派上了,路径和PC上的相同。 飞思卡尔平台编译安装待写 使用Camkit的接口非常简单方便,每个子功能均遵循类似的接口。 ```CxxxHandle = xxx_open(xxParams); // 打开xxx handle,例如: capture_open, convert_open...... // 具体操作xxx_close(xxxHandle); // 关闭handle,例如capture_close, convert_close...``` 一般调用步骤如下: ```Cstruct cap_handle *caphandle = NULL; // capture操作符struct cvt_handle *cvthandle = NULL; // convert操作符struct enc_handle *enchandle = NULL; // encode操作符struct pac_handle *pachandle = NULL; // pack操作符struct net_handle *nethandle = NULL; // network操作符struct cap_param capp; // capture参数struct cvt_param cvtp; // convert参数struct enc_param encp; // encode参数struct pac_param pacp; // pack参数struct net_param netp; // network参数// 设置各项参数capp.xxx = xxx...cvtp.xxx = xxx;...encp.xxx = xxx;...pacp.xxx = xxx;...netp.xxx = xxx;...// 使用设置好的参数打开各项功能caphandle = capture_open(capp);cvthandle = convert_open(cvtp);enchandle = encode_open(encp);pachandle = pack_open(pacp);nethandle = net_open(netp); capture_start(caphandle); // 开始capturewhile(1){ capture_get_data(caphandle, ...); // 获取一帧图像 convert_do(cvthandle, ...); // 转换,YUV422=>YUV420, 如果你的摄像头直接支持采集YUV420数据则不需要这一步 while (encode_get_headers(enchandle, ...) == 1) // 获取h264头,PPS/SPS { ... } encode_do(enchandle, ...); // 编码一帧图像 pack_put(pachandle, ...); // 将编码后的图像送给打包器 while(pack_get(pachandle, ...) == 1) // 获取一个打包后的RTP包 { net_send(nethandle, ...); // 将RTP包发送出去 }}capture_stop(caphandle); // 停止capture// 关闭各项功能net_close(nethandle);pack_close(pachandle);encode_close(enchandle);convert_close(cvthandle);capture_close(caphandle);``` Note:
PS: src目录有两个完整的例子,可以参考之。 实例--在树莓派上运行cktool查看实时录像src/cktool.c是运用Camkit的一个工具,实现了Camkit支持的全部功能。 使用方法: $cktool [options] options:
假设我们要在树莓派上使用Camkit,将树莓派和PC连在同一个路由器上。 RPI(Camkit) <==> 路由器 <==> PC (VLC) 首先,按照上面的讲解完成编译、安装。 配置树莓派开启摄像头支持并分配 然后,在PC上用记事本打开 最后,在树莓派上运行: #cktool -s 15 -a 192.168.1.2 -p 8888 至此,应该就可以在PC端的VLC窗口库看到树莓派的实时视频了。 |
请发表评论