Android视频数据采集,H.264编码

本文介绍了Android平台下通过摄像头采集视频数据,重点讲解了从NV21格式转换为YUV420P,以及如何进行H.264编码的过程。在编码中设置了预设参数,并调用了x264_encoder_encode函数。关键帧前会添加SPS和PPS以增强纠错能力,最后通过RTMP协议将编码后的数据发送到服务器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Andriod视频采集

在Android端通过摄像头可以采集到视频数据,通过

parameters.setPreviewFormat(ImageFormat.NV21)
通过adb logcat -s jw可以查看支持的格式,一般是NV21,YV12

可以指定视频的格式!
采集完成后的数据buffer就可以传到JNI层,进行格式转换以及编码!

NV,YUV格式转换

Android端采集完成的数据是NV21的,需要转换成YUV420P后,进行H.264编码!

NV21与YUV420P都是属于YUV420格式,每四个Y共用一组UV分量,区别是UV分量的空间排列不同,因此只需要将NV21的UV调换成YUV的VU即可!

H.264编码

预设参数

关于H.264编码,我们可以参照源码里面的example.c!首先需要设置相关的参数,然后再进行编码!
主要调用的几个函数:

x264_param_default_preset 设置
x264_param_apply_profile 设置档次
x264_picture_alloc(x264_picture_t输入图像)初始化
x264_encoder_open 打开编码器
x264_encoder_encode 编码
x264_encoder_close( h ) 关闭编码器,释放资源

开始编码

调用x264_encoder_encode开始编码得到一系列的NALU!
在编码成功后,就可以使用RTMP协议将编码的数据发送出去!

帧分为关键帧和普通帧,为了提高画面的纠错能力,需要将SPS(序列参数集),以及PPS(图像参数集)添加到关键帧的前面,让每个关键帧I帧都附带sps,pps!

N

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值