实时监控系统/直播系统(二)- 用H264对视频数据进行编码

一、项目思路

实时监控系统/直播系统,通过V4L2接口从摄像头采集YUYV格式的视频;用H264对视频数据进行编码;然后通过RTMP协议发送至支持了rtmp的nginx流媒体服务器;用客户端使用VLC从服务器拉流显示。

V4L2----->H264----->RTMP------>nginx------>VLC

二、配置环境

2.1、获取X264库源码

git config --global http.sslVerify false //解决ssl证书验证失败的问题

git clone VideoLAN / x264 · GitLab //下载代码

2.2、编译安装X264库

2.2.1、编译安装nasm

1)下载地址:Index of /pub/nasm/releasebuilds 需要下载2.13版本的

2)下载后复制到ubuntu

tar -xvf nasm-2.13.tar.gz

cd nasm-2.13/

3)配置编译nasm

sudo ./configure

sudo make

sudo make install

2.2.2、编译安装x264库

cd x264

sudo ./configure --enable-shared --enable-static --prefix=/usr

sudo make

sudo make install

三、H264

H264压缩图像是一个序列一个序列压缩的,一个序列中的多个帧基本是相似度非常高的图像,在一个序列中的第一个图像叫做IDR图像(立即刷新图像),IDR图像都是I帧图像。H264引入IDR图像是为了解码的重同步,当解码器解码到IDR图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。本设计只是用了H.264的编码部分,使用目前最为流行,性能最好的X264作为编码器

四、源代码

1.cam.c
2.X264_Code.h
#ifndef   __X264_Code__
#define   __X264_Code__
#include <stdint.h>    
#include <x264.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//编码器信息相关结构体
typedef struct encode{
	x264_param_t param; //相关配置信息
	x264_nal_t *nal;    //NAL单元   编码之后存储的NAL单元
	x264_picture_t picture;	  //H264图像,主要是用来存YUV分量的
	x264_t *handle;     //编码器指针
}Encode; 

//SPS和PPS相关结构体    ----单独的存放SPS和PPS
typedef struct sps_pps{
	uint8_t * sps;   //sps内容
	uint8_t * pps;   //pps内容
	uint32_t sps_len;   //sps长度
	uint32_t pps_len;   //pps长度
}sps_pps;

typedef   struct  sps_pps_buf{
	char   *buf;   //sps和pps的NAL单元   0x00 00 00 01+SPS+0x00  00  00  01+PPS 
	unsigned  int  length;   //sps+pps的大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值