资源简介
功能简介:
1.摄像头通过V4L2采集yuyv格式图像数据
2.yuyv转yuv420p格式
3.yuv420p通过x264编码压缩为h264码流
4.将h264码流通过tcp传输到显示端
5.显示端接收h264码流,并保存为本地文件,程序运行结束后可通过VLC播放器直接打开xxxx.h264文件进行播放。

代码片段和文件信息
#include “cam.h“
#include “x264_encode.h“
#include “net.h“
int usTimer(long us)
{
struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = us;
return select(0NULLNULLNULL&timeout);
}
int yuyv_to_yuv420p(const unsigned char *in unsigned char *out unsigned int width unsigned int height)
{
unsigned char *y = out;
unsigned char *u = out + width*height;
unsigned char *v = out + width*height + width*height/4;
unsigned int ij;
unsigned int base_h;
unsigned int is_y = 1 is_u = 1;
unsigned int y_index = 0 u_index = 0 v_index = 0;
unsigned long yuv422_length = 2 * width * height;
//序列为YU YV YU YV,一个yuv422帧的长度 width * height * 2 个字节
//丢弃偶数行 u v
for(i=0; i {
*(y+y_index) = *(in+i);
y_index++;
}
for(i=0; i {
base_h = i*width*2;
for(j=base_h+1; jse_h+width*2; j+=2)
{
if(is_u){
*(u+u_index) = *(in+j);
u_index++;
is_u = 0;
}
else{
*(v+v_index) = *(in+j);
v_index++;
is_u = 1;
}
}
}
return 1;
}
int open_cam()
{
struct v4l2_capability cap;
cam_fd = open(DEV_NAME O_RDWR | O_NONBLOCK 0); //非阻塞方式打开摄像头
if (cam_fd < 0)
{
perror(“open device failed!“);
return -1;
}
/*获取摄像头信息*/
if (ioctl(cam_fd VIDIOC_QUERYCAP &cap) < 0)
{
perror(“get info failed!“);
return -1;
}
printf(“Driver Name:%s\n Card Name:%s\n Bus info:%s\n version:%d\n capabilities:%x\n \n “ cap.driver cap.card cap.bus_infocap.versioncap.capabilities);
if ((cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) == V4L2_CAP_VIDEO_CAPTURE)
{
printf(“Device %s: supports capture.\n“DEV_NAME);
}
if ((cap.capabilities & V4L2_CAP_STREAMING) == V4L2_CAP_STREAMING)
{
printf(“Device %s: supports streaming.\n“DEV_NAME);
}
return 0;
}
int set_cap_frame()
{
struct v4l2_format fmt;
/*设置摄像头捕捉帧格式及分辨率*/
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
fmt.fmt.pix.width = WIDTH;
fmt.fmt.pix.height = HEIGHT;
fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV; //图像存储格式设为YUYV(YUV422)
if (ioctl(cam_fd VIDIOC_S_FMT &fmt) < 0)
{
perror(“set fmt failed!“);
return -1;
}
printf(“fmt.type:%d\n“fmt.type);
printf(“pix.pixelformat:%c%c%c%c\n“ \
fmt.fmt.pix.pixelformat & 0xFF\
(fmt.fmt.pix.pixelformat >> 8) & 0xFF \
(fmt.fmt.pix.pixelformat >> 16) & 0xFF\
(fmt.fmt.pix.pixelformat >> 24) & 0xFF);
printf(“pix.width:%d\n“fmt.fmt.pix.width);
printf(“pix.height:%d\n“fmt.fmt.pix.height);
printf(“pix.fiel
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-10-29 16:45 cam_x264_v2.0\
目录 0 2018-10-29 16:44 cam_x264_v2.0\cam\
文件 6387 2018-10-29 16:35 cam_x264_v2.0\cam\cam.c
文件 19576 2018-10-29 16:35 cam_x264_v2.0\cam\cam.o
文件 41314 2018-10-29 16:35 cam_x264_v2.0\cam\cam_x264
目录 0 2018-10-29 16:43 cam_x264_v2.0\cam\include\
文件 773 2018-10-29 16:33 cam_x264_v2.0\cam\include\cam.h
文件 290 2018-10-29 10:16 cam_x264_v2.0\cam\include\net.h
文件 46889 2018-10-23 10:41 cam_x264_v2.0\cam\include\x264.h
文件 172 2018-10-17 10:01 cam_x264_v2.0\cam\include\x264_config.h
文件 140 2018-10-29 16:15 cam_x264_v2.0\cam\include\x264_encode.h
目录 0 2018-10-29 16:43 cam_x264_v2.0\cam\lib\
文件 2375598 2018-10-17 10:00 cam_x264_v2.0\cam\lib\libx264.so
文件 2375598 2018-10-17 10:00 cam_x264_v2.0\cam\lib\libx264.so.157
目录 0 2018-10-29 16:43 cam_x264_v2.0\cam\lib\pkgconfig\
文件 321 2018-10-17 10:00 cam_x264_v2.0\cam\lib\pkgconfig\x264.pc
文件 2125 2018-10-29 16:35 cam_x264_v2.0\cam\main.c
文件 10988 2018-10-29 16:35 cam_x264_v2.0\cam\main.o
文件 376 2018-10-24 16:24 cam_x264_v2.0\cam\Makefile
文件 562 2018-10-29 10:07 cam_x264_v2.0\cam\net.c
文件 4828 2018-10-29 16:35 cam_x264_v2.0\cam\net.o
文件 4680 2018-10-29 16:16 cam_x264_v2.0\cam\x264_encode.c
文件 17236 2018-10-29 16:35 cam_x264_v2.0\cam\x264_encode.o
目录 0 2018-10-29 16:45 cam_x264_v2.0\cli\
文件 1906 2018-10-29 16:08 cam_x264_v2.0\cli\cli_video.c
文件 426 2018-10-29 17:14 cam_x264_v2.0\read.txt
相关资源
- 基于V4L2的视频采集,能够采集YUVJPE
- x264源码及其配置文件,用于配置树莓
- x264源代码
- 通过x264录制RGB屏幕视频vs2013工程,
- windows 32位64位 x264库,包含libdll和头文
- libx264静态库,windows x86版本
- X264实时编码,FFmpeg实时解码
- 使用RTMPdump(libRTMP)直播来自v4l2的摄
- x264 vs2010工程
- HandBrake视频转换VS2010编译通过
- h264编码流程概述
- qt5_V4L2_Camera 实现摄像头实时画面显示
- v4l2中文手册(规范)全五章(包含驱
- libx264 将rgb24格式转换为h264 vs2013
- libx264动态库
- USB摄像头通过v4l2技术采集、储存视频
- V4L2采集YUYV数据x264编码成H264视频
- X264编码H264视频
- linux下关于Qt界面的摄像头v4l2操作源码
- Linux PC下UVC摄像头采集并用x264进行编
- SONY IMX264 Data Sheet
- yuv转bmp(16位24位32位)工具与vc工程
- x264库(64位and32位)
- linux+QT下基于RTP协议的实时视频传输客
- 视频编解码---x264用于编码,ffmpeg用于
- webcam(含有编译好的ffmpegx264z库)
- D3D三层Texture纹理经像素着色器实现渲
- Qt播放YUV420P文件
- linux+qt+v4l2 摄像头视频捕捉--源代码
- Linux下使用Qt+V4L2测试UVC相机
评论
共有 条评论