资源简介
1.使用ffmpeg将多张图片生成H264文件;
2.从H264文件中获取一帧图片和一帧中的SLICE图片;
3.能够直接使用ffplay.exe播放H264文件;
4.完整工程,可直接运行(附带测试图片和实例);
5.vs2013;
代码片段和文件信息
#include “Decoder.h“
#include “ShareHeader.h“
CDecoder::CDecoder(const char *_fpath)
: m_filePath(_fpath)
m_VideoStream(-1)
{
}
CDecoder::~CDecoder()
{
uninit();
}
void CDecoder::init(DECODERFORMAT _fmt)
{
RETURN_H264(_access(m_filePath.c_str() 0) == -1 “file does not existed.\n“);
//get a AVFormatContext.
m_pFmtContext = avformat_alloc_context();
RETURN_H264(m_pFmtContext == 0 “Decoder initialize fail.\n“);
//open video file.
RETURN_H264(avformat_open_input(&m_pFmtContext m_filePath.c_str() NULL NULL) < 0 “open input fail.\n“);
//get streams information.
RETURN_H264(avformat_find_stream_info(m_pFmtContext NULL) < 0 “no stream information.\n“);
//get video stream.
for (unsigned int i = 0; i < m_pFmtContext->nb_streams; ++i)
{
if (m_pFmtContext->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
{
m_VideoStream = i;
break;
}
}
//get decoder.
AVCodec *pDecoder = avcodec_find_decoder(m_pFmtContext->streams[m_VideoStream]->codecpar->codec_id);
RETURN_H264(pDecoder == 0 “was not find decoder.\n“);
//allloc a AVCodecContext.
m_pCodecContext = avcodec_alloc_context3(pDecoder);
RETURN_H264(m_pCodecContext == 0 “alloc AVCodecContext fail.\n“);
//codec paramter to AVCodecContext.
avcodec_parameters_to_context(m_pCodecContext m_pFmtContext->streams[m_VideoStream]->codecpar);
//open decoder.
RETURN_H264(avcodec_open2(m_pCodecContext pDecoder NULL) < 0 “open decoder fail.\n“);
//alloc frame to deal with data.
m_pframeData = av_frame_alloc();
m_pframeRGBA = av_frame_alloc();
//make sure the size of picture.
switch (_fmt)
{
case FMT_BGR24: m_src_pix_fmt = AV_PIX_FMT_BGR24; break;
case FMT_RGB24: m_src_pix_fmt = AV_PIX_FMT_RGB24; break;
//case FMT_RGBA: m_src_pix_fmt = AV_PIX_FMT_RGBA; break;
default:break;
}
int _size = av_image_get_buffer_size(m_src_pix_fmt m_pCodecContext->width m_pCodecContext->height 2);
uint8_t *_buf = (uint8_t *)av_malloc(_size);
av_image_fill_arrays(m_pframeRGBA->data m_pframeRGBA->linesize _buf m_src_pix_fmt m_pCodecContext->width m_pCodecContext->height 2);
//get a swsContext by format.
m_pSwsContext = sws_getContext(
m_pCodecContext->width m_pCodecContext->height m_pCodecContext->pix_fmt
m_pCodecContext->width m_pCodecContext->height m_src_pix_fmt
SWS_BICUBIC NULL NULL NULL);
RETURN_H264(m_pSwsContext == 0 “get a swsContext fail.\n“);
}
void CDecoder::setCallBack(PICTUREDATA _func)
{
m_pFunc = _func;
}
void CDecoder::Procframe()
{
RETURN_H264(m_pFmtContext == 0 || m_pCodecContext == 0 || m_pframeData == 0 || m_pframeRGBA == 0 || m_pSwsContext == 0
“paramters is null.\n“);
AVPacket packet;
while (m_VideoStream != -1 && m_bExit == false)
{
if (m_bPause)
{
std::this_thread::sleep_for(std::chrono::milliseconds(100));
continue;
}
BREAK_H264(av_read_frame(m_pFmtContext &packet) < 0
“read frame fail or eof.\n“);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1899 2018-10-09 11:11 H264\FFmpeg2Video.sln
文件 1207 2018-07-25 16:41 H264\include\libavcodec\ac3_parser.h
文件 1354 2018-07-25 16:41 H264\include\libavcodec\adts_parser.h
文件 211684 2018-07-25 16:41 H264\include\libavcodec\avcodec.h
文件 2570 2018-07-25 16:41 H264\include\libavcodec\avdct.h
文件 3111 2018-07-25 16:41 H264\include\libavcodec\avfft.h
文件 2853 2018-07-25 16:41 H264\include\libavcodec\d3d11va.h
文件 4044 2018-07-25 16:41 H264\include\libavcodec\dirac.h
文件 3715 2018-07-25 16:41 H264\include\libavcodec\dv_profile.h
文件 2361 2018-07-25 16:41 H264\include\libavcodec\dxva2.h
文件 1650 2018-07-25 16:41 H264\include\libavcodec\jni.h
文件 2825 2018-07-25 16:41 H264\include\libavcodec\mediacodec.h
文件 3763 2018-07-25 16:41 H264\include\libavcodec\qsv.h
文件 2297 2018-07-25 16:41 H264\include\libavcodec\vaapi.h
文件 5796 2018-07-25 16:41 H264\include\libavcodec\vdpau.h
文件 4785 2018-07-25 16:41 H264\include\libavcodec\version.h
文件 4029 2018-07-25 16:41 H264\include\libavcodec\videotoolbox.h
文件 2285 2018-07-25 16:41 H264\include\libavcodec\vorbis_parser.h
文件 6062 2018-07-25 16:41 H264\include\libavcodec\xvmc.h
文件 17918 2018-07-25 16:41 H264\include\libavdevice\avdevice.h
文件 1861 2018-07-25 16:41 H264\include\libavdevice\version.h
文件 42263 2018-07-25 16:41 H264\include\libavfilter\avfilter.h
文件 6316 2018-07-25 16:41 H264\include\libavfilter\buffersink.h
文件 6608 2018-07-25 16:41 H264\include\libavfilter\buffersrc.h
文件 2334 2018-07-25 16:41 H264\include\libavfilter\version.h
文件 117558 2018-07-25 16:41 H264\include\libavformat\avformat.h
文件 31557 2018-07-25 16:41 H264\include\libavformat\avio.h
文件 3781 2018-07-25 16:41 H264\include\libavformat\version.h
文件 1673 2018-07-25 16:41 H264\include\libavutil\adler32.h
文件 1834 2018-07-25 16:41 H264\include\libavutil\aes.h
............此处省略380个文件信息
- 上一篇:概率论基础教程中文
- 下一篇:黑客与画家(高清中文版pdf).zip
相关资源
- ffmpeg h264 转换jpg
- 利用FFmpeg将Jpeg图片转为任意视频容器
- ffmpeg exeWINXP的最后一个可运行版本
- 最简单的基于FFMPEG的视频编码器修正
- ffmpeg-vs2013
- 基于FFMPEG_SDL2_音视频播放_参考音频时
- ffmpeg-3.2-win32-shared.zip
- ffmpeg录音
- ffmpeg资料全
- ffmpeg_windows屏幕录制并编码成H264
- windows32位系统的ffmpeg
- 利用ffmpeg提取任意格式视频帧关键帧
- ffmpeg3.0源码
- FFmpeg解码+SDL播放
- ffmpeg封装H264成MP4、AVI视频格式,及提
- 从零开始学习音视频编程技术十二 录
- AudioResample
- 最简单的基于FFmpeg的libswscale的教程
- H264实时编码RTSP直播
- ffmpeg-2.5.2-win32-shared
- 利用FFmpeg将mkv视频转换为H.264
- 安卓交叉编译ffmepgx86_64版本
- ffmepg的安卓arm(armeabi-v7a)版本
- 基于ARM9的远程视频监控系统
- 最简单的基于FFmpeg的封装格式转换器
- SDK播放器加速.zip
- 基于ffmpeg的经典版 ffplay 音视频播放
- ffmpeg api实现视频转码音视频
- h264经典学习指南书籍
- FFMPEG入门基础资料pdf
评论
共有 条评论