当前位置:文档之家› FFmpeg

FFmpeg

பைடு நூலகம்
在6410上应用FFmpeg进行H264硬件编码
在6410上应用FFmpeg进行H264硬件编码
在210上应用FFmpeg进行H264硬件编码
在210上实现过程与在6410上类似
疑问:210上进行H264硬件编码,需要输入YUV420SP的数据,并且
编码出来的test.h264不能正常播放。
在210上应用FFmpeg进行H264硬件编码
应用FFmpeg进行H264硬件编码问题
陈恒鑫 2013.12.30
主要内容

在6410上应用FFmpeg进行H264硬件编码
在210上应用FFmpeg进行H264硬件编码

在6410上应用FFmpeg进行H264硬件编码
FFmpeg:自由软件、多媒体视频处理工具
./ffmpeg -t 10 -f video4linux2 -s 176*144 -r 8 -i /dev/video0 -vcodec h264 test.h264
① 按照ffmpeg对编解码器的描述,自定义编解码器并实现定义中 的相关函数。 ② 通过REGISTER_ENCDEC(X,x)函数将自定义编解码器注册到视 频编解码器链中,保证在获取视频信息的时候可以找到自定义 的编解码器。
基于S3C6410的MFC实现H264硬件编码器
static void *handle; static void *mfc_encoder_init(int width, int height, int frame_rate, int bitrate, int gop_num); static void *mfc_encoder_exe(void *handle,unsigned char *yuv_buf, int frame_size, int first_frame, long *size); static void mfc_encoder_free(void*handle);
未解决问题: 1、数据编码后经网络发送到接收端不能解码 2、x264软编码码在数据发送前都添加了NAL(网络适应层),硬编码没 有 3、如有必要,硬编码后的数据如何添加NAL
在6410上应用FFmpeg进行H264硬件编码
在6410上应用FFmpeg进行H264硬件编码
static int s3c_h264_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame,int *got_packet) struct AVFrame { uint8_t *data[4];分别指向yuv三个位面及一个未知的位面或者是rgb模式下只有 data[0]指向raw data int linesize[4];四个位面分别的内存块大小 } 对从文件中读取的包进行解码,将解码后的yuv数据填充在 AVFrame的 data及 linesize的字段内。
主要组成:libavformat、libavcodec、libavutil、libswscale、 libpostproc;ffmpeg、ffsever、ffplay.
H264:高性能的视频编解码技术
低码流、图像质量高、容错能力强、网络适应性强
在6410上应用FFmpeg进行H264硬件编码
添加H264硬件编码器
在6410上应用FFmpeg进行H264硬件编码
交叉编译: ~#./configure --enable-cross-compile --arch=arm --cpu=armv6 --targetos=linux --cross-prefix=/usr/local/arm/4.3.2/bin/arm-linux- --disableshared --enable-static --prefix=$(pwd)/_install ~#make ~#make install 将其移植到开发板上进入_install/bin目录下,运行: ./ffmpeg –s 480x272 –i /sdcard/Cam_YUV420_480x272-1.yuv test.h264 运行结果:输入的视频是彩色的,但是编码后的图像是灰度图像, 说明硬件编码有问题。
在6410上应用FFmpeg进行H264硬件编码
理想情况: picture->linesize[0]=x4->cwidth; picture->linesize[1]=x4->cwidth/2; picture->linesize[2]=x4->cwidth/2;
实际情况:
在6410上应用FFmpeg进行H264硬件编码
相关主题