上网找了一个开源的库,是Camkit 一个开源的C语言库,支持单个摄像头发送RTP包视频流。
具体可以参考github文档:https://git.oschina.net/andyspider/Camkit
自己的好奇,希望在树莓派上使用两个摄像头,参考了库里面的simple_demo代码后,自己写了传输两个摄像头视频流的demo
先讲讲思路,比较简单,首先理由v4l2打开pi上的两个摄像头(需要注意的是,usb摄像头的设备位置会经常变动,有时候是video0 和video1 有时候又是video0 和video1,怎么回事,我也还没弄明白,但是先这样用着,可以用 ls /dev | grep video* 查询一下他们的名字,然后对应修改就可以了)
接着,打开两个udp socket的连接
后面打开convert handle,encode handle,pack handle;
接着设置他们的参数。
到这里,所有准备工作已经做完
接着就是一个loop 开始捕获图片,把捕获的图片转换为YUV420,获取h264 头,打包,发送头,编码转换为YUV420的图片,打包,发送。done
因为这里是两个摄像头,因此就每个摄像头交替完成上述的loop的过程!
下面附上代码(写的菜,不要介意!)
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <linux/videodev2.h>
#include <pthread.h>
#include "camkit.h"
#define WIDTH 352
#define HEIGHT 288
#define FRAMERATE 10
// set paraments
U32 vfmt = V4L2_PIX_FMT_YUYV;
U32 ofmt = V4L2_PIX_FMT_YUV420;
char *deviceOne = "/dev/video2";
char *deviceTwo = "/dev/video3";
char *oneIp = "192.168.199.219";
int onePort = 8888;
int tw