H.264是一种数字视频压缩方式,因为摄像头原始帧数据一般比较大,比如一帧YUV(640*480)格式的图像,大小为640*480*12/8,约460KB,如果一秒取20帧,进行实时视频传输,每秒需要传输9M左右,比较占用宽带资源,而且视频过大不利于存储。利用H264进行编码后传输是一种比较好的解决方案。
这里我对上一篇摄像头应用程序进行部分修改,并添加h264编码部分。实现效果是,在程序中不断获取摄像头原始帧数据,然后对其进行编码后写入到输出文件中,最后输出文件可以用VLC播放器来查看编码效果。
首先看main函数,代码如下。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include <string.h>
#include <malloc.h>
#include <time.h>
#include <iostream>
#include "camera.h"
#include"mfc.h"
#define CAM_NAME "/dev/video0"
#define OUT_PATH "out.h264"
int main(void)
{
int width=640;
int height=480;
int qb=20;
int frames=300;
std::cout << std::endl;
std::cout << "The frames you wish to be encode:" << std::endl;
std::cin >> frames;