用libx264对视频数据进行编码的步骤
2013-05-08 16:00
281 查看
一、初始化
二、编码,输入值为一帧RBGA格式的视频数据,返回为一数组,其保存着h264编码后的nal.
x264_param_t *param264Encode; x264_t *encoder264; x264_picture_t *picture264In; x264_picture_t *picture264Out; AVFrame *encodeSrcFrame; encodeSize=CGSizeMake(size.width, size.height); int encodeWidth=encodeSize.width; int encodeHeight=encodeSize.height; encodeSrcFrame=avcodec_alloc_frame(); picture264In=malloc(sizeof(x264_picture_t)); picture264Out=malloc(sizeof(x264_picture_t)); param264Encode=malloc(sizeof(x264_param_t)); x264_param_default(param264Encode); x264_param_default_preset(param264Encode, "faster", "zerolatency"); param264Encode->i_csp=X264_CSP_I420; param264Encode->i_width=encodeWidth; param264Encode->i_height=encodeHeight; param264Encode->i_fps_num=fps; param264Encode->i_fps_den=1; param264Encode->i_keyint_max=100; param264Encode->i_keyint_min=50; param264Encode->rc.i_rc_method=X264_RC_CQP; param264Encode->rc.f_rf_constant=25; param264Encode->rc.f_rf_constant_max=35; x264_param_apply_profile(param264Encode, "baseline"); encoder264=x264_encoder_open(param264Encode);
二、编码,输入值为一帧RBGA格式的视频数据,返回为一数组,其保存着h264编码后的nal.
-(NSArray*)encodeVideDataWithx264Encoder:(NSData*)data{ NSMutableArray *arrNals=[[NSMutableArray alloc] init]; uint8_t *src=(uint8_t*)[data bytes]; avpicture_fill((AVPicture*)encodeSrcFrame, src, PIX_FMT_NV12, encodeSize.width, encodeSize.height); if(x264_picture_alloc(picture264In, X264_CSP_I420, encodeSize.width, encodeSize.height)<0){ TTDCONDITIONLOG(LogFlagEncode, @"x264 picture in alloc error."); } if(encodeSwsContext==NULL){ encodeSwsContext=sws_getCachedContext(encodeSwsContext, encodeSize.width, encodeSize.height, PIX_FMT_NV12, encodeSize.width, encodeSize.height, PIX_FMT_YUV420P, SWS_FAST_BILINEAR, NULL, NULL, NULL); } sws_scale(encodeSwsContext, (const uint8_t* const*)encodeSrcFrame->data, encodeSrcFrame->linesize, 0, encodeSize.height, picture264In->img.plane, picture264In->img.i_stride); x264_nal_t *nals; int i_nals; int frame_size=x264_encoder_encode(encoder264, &nals, &i_nals, picture264In, picture264Out); if(frame_size>0){ TTDCONDITIONLOG(LogFlagEncode, @"x264 encode nal type:%d,nal units count:%d",nals->i_type,i_nals); if(i_nals>1){ for(int i=0;i<i_nals;i++){ @autoreleasepool { NSData *nalData=[[NSData alloc] initWithBytes:nals[i].p_payload length:nals[i].i_payload]; [arrNals addObject:nalData]; [nalData release]; } } } } else{ TTDCONDITIONLOG(LogFlagEncode, @"x264_encoder return value error:%d",frame_size); } x264_picture_clean(picture264In); return [arrNals autorelease]; }
相关文章推荐
- 用libx264对视频数据进行编码的步骤
- [原]从管道传送数据到ffmpeg进行视频编码
- 利用ffmpeg进行摄像头提取视频编码为h264通过RTP发送数据到指定的rtp地址
- 利用ffmpeg进行摄像头提取视频编码为h264通过RTP发送数据到指定的rtp地址
- 从管道传送数据到ffmpeg进行视频编码
- 使用 ffmpeg 进行网络推流:拉流->解封装->解码->处理原始数据(音频、视频)->编码->编码->推流
- ffmpeg:视频解码以及解码后数据的编码
- JSP对浏览器发送来的数据进行重新编码的两种方式
- SpringMVC_01 SpringMVC五大组件、SpringMVC编程步骤(不使用注解进行配置)、SpringMVC编程步骤(利用注解进行配置)、参数获取、响应数据
- 实现 V4L2视频采集与 FFMPEG 编码YUYV 数据 为H264(2)
- android平台Camera采集数据ffmpeg进行编码探究
- Android使用系统API进行音视频编码
- 如何使得中文不被 json_encode 不编码成 unicode PHP 浏览:9722 2014年08月14日 使用 php 自带的 json_encode 函数对数据进行编码时,中文都会变成
- 在PHP中对查询出得数据库数据进行json编码
- RTMP推送直播H264/AAC编码的音视频采集数据
- VS2008+OPENCV+FFMPEG实现从摄像头采集数据并进行H264编码
- 对从数据库取出的数据进行强制编码,并把字符串转换正字符流
- IIS7.5中对所有请求响应的JSON数据进行GZIP编码
- C#对二进制数据进行base64编码的方法
- Android利用mediacodec进行视频H264编码解码播放