使用ffmpeg的库编码mpeg的技术(原创)
来源:互联网 发布:华为ff软件 编辑:程序博客网 时间:2024/06/11 10:04
使用ffmpeg的库编码mpeg的技术总结报告
Sun Gang, 2003-11-21
一 . 概述
Ffmpeg是一个优秀的基于LGPL协议的视频/音频转换器.目前已经有很多多媒体应用软件使用它来作为编码器,如Xine,Mplayer,Xbox Media Player等.它也能用于从视频/音频源来抓取数据保存为视频音频文件.Ffmpeg还能从各种采样率来开始转换,能够通过高品质的多相滤波技术来实现放大缩小,频域相域的变换等.
这里,我们使用Ffmpeg来实现mpeg的编码过程.
二 . 摄像头的视频捕捉调用相关说明(即使用Video4Linux API获取图象的调用说明)
#include <videodev.h>
struct video_window vid_win;
struct video_capability vid_caps;
struct video_picture vid_pic;
struct video_mbuf mbuf;
1. 打开设备
int dev = open("/dev/video0",O_RDWR);
2. 获取相关参数
ioctl (dev, VIDIOCGCAP, &vid_caps);
ioctl (dev, VIDIOCGWIN, &vid_win);
ioctl (dev, VIDIOCGPICT, &vid_pic);
//Check to see if we can use mmap
if(0 == ioctl(dev,VIDIOCGMBUF,&mbuf))...;
//Check to see if this camera uses MJPEG
if(vid_caps.type & VID_TYPE_MJPEG_ENCODER)...;
3. 设置相关参数
ioctl(dev, VIDIOCSPICT, &vid_pic);
ioctl(dev, VIDIOCSWIN, &vid_win);
4. 获取图象数据
read (dev, picbuff, size);
//至此,图象数据存放在picbuff中
三 . QRecord编码接口说明(编码为MPEG1 System format, 其中视频采用mpeg1video, 音频采用MP2)
定义如下
class QRecord
{
public:
//encode mpeg1 file with ffmpeg library
static int audio_input_frame_size;
static AVOutputFormat *fmt;
static AVFormatContext *oc;
static AVStream *audio_st,*video_st;
static int Open(const char* filename,int width,int height,int frame_rate,bool audio_on=false);
static int AddVideoFrame(uint8_t* y,uint8_t* u,uint8_t* v);
static int AddAudioFrame(int16_t* inbuf);
static int Close();
//for decompress Jpeg
static int DecompressJpeg(const char* input,unsigned char* rgbbuffer);
//for rgb2yuv convert
static int count ;
static float RGBYUV02990[256], RGBYUV05870[256], RGBYUV01140[256];
static float RGBYUV01684[256], RGBYUV03316[256];
static float RGBYUV04187[256], RGBYUV00813[256];
static void InitRGB2YUVLookupTable();
static int RGB2YUV (int x_dim, int y_dim, void *bmp, void *y_out, void *u_out, void *v_out, int flip);
static int add_scanline_to_rgbbuffer(unsigned char* linebuffer,int length,unsigned char* rgbbuffer);
};
几个重要接口函数说明,
QRecord::Open() 打开要存储文件,并初始化各项参数
QRecord::AddVideoFrame()增加一帧视频数据,格式为YUV420P,
QRecord::AddAudioFrame()增加一帧音频数据,格式为44.1KHz,16bits,2channels PCM data
QRecord::Close()关闭文件,释放内存等.
四 . 编码速度测试报告
测试数据为25张320X240,RGB24的图片文件,编码1000帧的各自需要时间如下:
VIA Cyrix 1G, 96M ram为 39-42秒
Intel PIII-M 800M, 128M ram 为6秒
Intel PIII 550M,128M ram为10 秒.
- 使用ffmpeg的库编码mpeg的技术(原创)
- ffmpeg添加mpeg ps流的pcm的编码支持
- 使用FFMPEG编码保存MPEG-1/MPEG-2文件格式
- 使用FFMPEG编码保存MPEG-1/MPEG-2文件格式
- MPEG-2的编码
- MPEG-1层Ⅲ与AAC技术的编码原理
- MPEG的系统层编码
- MPEG-4编码技术
- 使用FFMPEG编码保存MPEG-1/MPEG-2文件格式 ([PAL,NTSC]:[VCD,DVD])
- Linux 音视频技术] 转:ffmpeg使用x264编码的配置+ ffmpeg与 x264编码器参数完整对照表
- Linux 音视频技术] 转:ffmpeg使用x264编码的配置+ ffmpeg与 x264编码器参数完整对照表
- 基于DM642的MPEG-2视频压缩编码
- ffmpeg使用x264编码的配置
- ffmpeg使用x264编码的配置
- FFMpeg编码MPEG-1,2视频
- FFMpeg编码MPEG-1,2视频
- FFMpeg编码MPEG-1,2视频
- 由mpeg容错技术想到的
- Test
- 终于拥有了一个属于自已的Blog,兴奋ing~~
- Log4j的中文文档
- 我是程序员吗?
- Test2
- 使用ffmpeg的库编码mpeg的技术(原创)
- 测试一下
- log4j的FAQ
- Jsp环境配置
- The BookList of Programming Language
- 数据集的基本组成部分通过标准编程构造(如属性和集合)
- TCP/IP Datagram Explain
- Windows named pipes exploitation
- The BOOkList of Software Engineering