资源简介
根据雷霄骅的代码修改的,使用ffmpeg纯净解码,sdl显示h264,稍作修改就能实时播放h264网络视频流,有较详细的注释,希望对你有所帮助!
代码片段和文件信息
/**
* 最简单的基于FFmpeg的视频解码器(纯净版)
* Simplest FFmpeg Decoder Pure
*
* 雷霄骅 Lei Xiaohua
* leixiaohua1020@126.com
* 中国传媒大学/数字电视技术
* Communication University of China / Digital TV Technology
* http://blog.csdn.net/leixiaohua1020
*
*
* 本程序实现了视频码流(支持HEVC,H.264,MPEG2等)解码为YUV数据。
* 它仅仅使用了libavcodec(而没有使用libavformat)。
* 是最简单的FFmpeg视频解码方面的教程。
* 通过学习本例子可以了解FFmpeg的解码流程。
* This software is a simplest decoder based on FFmpeg.
* It decode bitstreams to YUV pixel data.
* It just use libavcodec (do not contains libavformat).
* Suitable for beginner of FFmpeg.
*/
#include
#define __STDC_CONSTANT_MACROS
#define SDL_MAIN_HANDLED
#ifdef _WIN32
//Windows
extern “C“
{
#include “libavcodec/avcodec.h“
#include “libswscale/swscale.h“
#include “SDL2/SDL.h“
};
#else
//Linux...
#ifdef __cplusplus
extern “C“
{
#endif
#include
#include
#ifdef __cplusplus
};
#endif
#endif
#define USE_SWSCALE 1
//test different codec
#define TEST_H264 1
#define TEST_HEVC 0
//SDL Event
#define REFRESH_EVENT (SDL_USEREVENT + 1)
#define BREAK_EVENT (SDL_USEREVENT + 2)
#define WINDOW_NAME “Cameree ACS Video“
const int bpp = 12;
int screen_w = 960 screen_h = 540;
const int pixel_w = 1280 pixel_h = 720;
char filepath_in[] = “video.h264“;
// 一帧图像数据长度 width*height*3/2
int buffer_size = pixel_w*pixel_h*bpp / 8;
unsigned char buffer[pixel_w*pixel_h*bpp / 8];
int thread_exit = 0;
bool b_close_window = 0;
int refresh_video(void *opaque) {
thread_exit = 0;
while (!thread_exit) {
SDL_Event event;
event.type = REFRESH_EVENT;
SDL_PushEvent(&event); //添加新的event到event queue
SDL_Delay(33); // ms,可以自己设帧率
}
thread_exit = 0;
//Break
SDL_Event event;
event.type = BREAK_EVENT;
SDL_PushEvent(&event);
return 0;
}
int main(int argc char* argv[])
{
AVCodec *pCodec;
AVCodecContext *pCodecCtx= NULL;
AVCodecParserContext *pCodecParserCtx=NULL;
FILE *fp_in;
AVframe *pframe; //存储一帧解码后的像素数据
const int in_buffer_size=4096;
uint8_t in_buffer[in_buffer_size + FF_INPUT_BUFFER_PADDING_SIZE]={0};
uint8_t *cur_ptr;
int cur_size;
AVPacket packet; // 存储一帧(一般情况下)压缩编码数据
int ret got_picture;
int y_size;
#if TEST_HEVC
enum AVCodecID codec_id=AV_CODEC_ID_HEVC;
char filepath_in[]=“bigbuckbunny_480x272.hevc“;
#elif TEST_H264
AVCodecID codec_id=AV_CODEC_ID_H264;
#else
AVCodecID codec_id=AV_CODEC_ID_MPEG2VIDEO;
char filepath_in[]=“bigbuckbunny_480x272.m2v“;
#endif
int first_time=1;
#if USE_SWSCALE
struct SwsContext *img_convert_ctx;
AVframe *pframeYUV;
uint8_t *out_buffer;
#endif
//av_log_set_level(AV_LOG_DEBUG);
avcodec_register_all(); //注册所有的编解码器
pCodec = avcodec_find_decoder(codec_id); //查找解码器
if (!pCodec) {
printf(“Codec not found\n“);
return -1;
}
pCodecCtx = avcodec_alloc_context3(pCodec); //为 AVCodecContext 分配内存
if (!pCodec
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 75 2015-07-15 16:19 .gitignore
文件 18936320 2015-07-15 16:19 avcodec-55.dll
文件 418304 2015-07-15 16:19 avutil-52.dll
文件 626669 2015-07-15 16:19 bigbuckbunny_480x272.h264
文件 749932 2015-07-15 16:19 bigbuckbunny_480x272.hevc
文件 918534 2015-07-15 16:19 bigbuckbunny_480x272.m2v
文件 391680 2017-06-15 10:05 bigbuckbunny_480x272.yuv
文件 573 2015-07-15 16:19 compile_cl.bat
文件 458 2015-07-15 16:19 compile_gcc.sh
文件 463 2015-07-15 16:19 compile_mingw.sh
目录 0 2017-06-15 09:46 include\
文件 6002 2015-07-15 16:19 include\inttypes.h
目录 0 2015-07-15 16:19 include\libavcodec\
文件 180728 2015-07-15 16:19 include\libavcodec\avcodec.h
文件 3229 2015-07-15 16:19 include\libavcodec\avfft.h
文件 2488 2015-07-15 16:19 include\libavcodec\dxva2.h
文件 11053 2015-07-15 16:19 include\libavcodec\old_codec_ids.h
文件 4180 2015-07-15 16:19 include\libavcodec\vaapi.h
文件 4262 2015-07-15 16:19 include\libavcodec\vda.h
文件 6415 2015-07-15 16:19 include\libavcodec\vdpau.h
文件 5759 2015-07-15 16:19 include\libavcodec\version.h
文件 6232 2015-07-15 16:19 include\libavcodec\xvmc.h
目录 0 2015-07-15 16:19 include\libavutil\
文件 1639 2015-07-15 16:19 include\libavutil\adler32.h
文件 1899 2015-07-15 16:19 include\libavutil\aes.h
文件 4390 2015-07-15 16:19 include\libavutil\attributes.h
文件 88 2015-07-15 16:19 include\libavutil\audioconvert.h
文件 4563 2015-07-15 16:19 include\libavutil\audio_fifo.h
文件 2179 2015-07-15 16:19 include\libavutil\avassert.h
文件 218 2015-07-15 16:19 include\libavutil\avconfig.h
文件 12829 2015-07-15 16:19 include\libavutil\avstring.h
............此处省略133个文件信息
相关资源
- 最简单的利用ffmpeg获取视频的图片
- 基于STM32F407的视频采集与传输系统设
- 最简单的基于FFmpeg的编码器 1.2
- 网络规划设计师历年真题2009-2018年含
- vs2012调试ffmpeg.c
- 基于FFMPEG SDK流媒体开发1---解码媒体文
- ffmpeg 源码demo
- FFVideoPlyer_视频读帧解码播放.rar
- 最简单的基于FFMPEG的AVDevice的 1.2
- 最简单的基于FFMPEG的音频编码器 1.1
- 最简单的基于FFMPEG+SDL的视频播放器
- ffmpeg提取mp4关键帧保存为jpg.zip
- ffmpeg+qt的简单播放器
- 使用ffmpeg将多张图片生成H264裸流并获
- ffmpeg h264 转换jpg
- 利用FFmpeg将Jpeg图片转为任意视频容器
- Emgu.CV 打开视频与人脸检测
-
KindEditor与jwpla
yer集成,优化kindEdi - ffmpeg exeWINXP的最后一个可运行版本
- 最简单的基于FFMPEG的视频编码器修正
- mp4测试视频,可以用它测试处理MP4文
- ffmpeg-vs2013
- 基于FFMPEG_SDL2_音视频播放_参考音频时
- ffmpeg-3.2-win32-shared.zip
- 一套价值10000元的excel视频教程
- ffmpeg录音
- ffmpeg资料全
- ffmpeg_windows屏幕录制并编码成H264
- 毕设-云视频学习平台的设计及实现
- windows32位系统的ffmpeg
评论
共有 条评论