资源简介
FFmpeg和SDL,读内存中的视频流,进行缩放和播放,VC2010下
代码片段和文件信息
#include “include\sdl2\SDL.h“
extern “C“
{
#include “include\libavformat\avformat.h“
#include “include\libswscale\swscale.h“
};
FILE *fp = NULL;
int read_buffer(void *opaqueuint8_t *bufint buf_size)
{
if(!feof(fp))
{
int true_size = fread(buf1buf_sizefp);
return true_size;
}
else
return -1;
}
int Resolutionchange(AVCodecContext *pCodecCtxAVframe *pframeAVframe *pNewframeint pNewWidthint pNewHeight)
{
pNewframe->linesize[0] = pNewWidth;
pNewframe->linesize[1] = pNewWidth/2;
pNewframe->linesize[2] = pNewWidth/2;
struct SwsContext *pSwsCtx = NULL;
pSwsCtx = sws_getContext(pCodecCtx->widthpCodecCtx->heightPIX_FMT_YUV420PpNewWidthpNewHeightPIX_FMT_YUV420PSWS_SINCNULLNULLNULL);
if(pSwsCtx == NULL)
return -1;
sws_scale(pSwsCtxpframe->datapframe->linesize0pCodecCtx->heightpNewframe->datapNewframe->linesize);
sws_freeContext(pSwsCtx);
return 0;
}
int main(int argcchar **argv)
{
av_register_all();
avformat_network_init();
AVFormatContext *pFormatCtx = NULL;
pFormatCtx = avformat_alloc_context();
char filepath[]=“test.ts“;
fp = fopen(filepath“rb+“);
if(fp == NULL)
return -1;
unsigned char *aviobuffer = (unsigned char *)av_malloc(32768);//32K
AVIOContext *avio = avio_alloc_context(aviobuffer327680NULLread_bufferNULLNULL);
pFormatCtx->pb = avio;
if(avformat_open_input(&pFormatCtxNULLNULLNULL)!= 0)
return -2;
if(avformat_find_stream_info(pFormatCtxNULL) < 0)
return -3;
int videoindex = -1;
for(int i=0;inb_streams;i++)
{
if(pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
{
videoindex=i;
break;
}
}
if(videoindex == -1)
return -4;
AVCodecContext *pCodecCtx;
pCodecCtx = pFormatCtx->streams[videoindex]->codec;
AVCodec *pCodec;
pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
if(pCodec==NULL)
return -5;
if(avcodec_open2(pCodecCtx pCodecNULL) < 0)
return -6;
AVframe *pframe*pNewframe;
pframe = av_frame_alloc();
pNewframe = av_frame_alloc();
int PictureSize = avpicture_get_size(PIX_FMT_YUV420PpCodecCtx->widthpCodecCtx->height);
uint8_t *buffer = (uint8_t *)av_malloc(PictureSize*sizeof(uint8_t));
avpicture_fill((AVPicture *)pNewframebufferPIX_FMT_YUV420PpCodecCtx->widthpCodecCtx->height);
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER))
return -7;
SDL_Window *window = nullptr;
window = SDL_CreateWindow(“MyPlayer“SDL_WINDOWPOS_UNDEFINEDSDL_WINDOWPOS_UNDEFINEDpCodecCtx->widthpCodecCtx->heightSDL_WINDOW_OPENGL);
if(!window)
return -7;
SDL_Renderer *renderer = nullptr;
renderer = SDL_CreateRenderer(window-10);
if(renderer == nullptr)
return -8;
SDL_Texture *texture = nullptr;
texture = SDL_CreateTexture(rendererSDL_PIXELFORMAT_YV12SDL_TEXTUREACCESS_STREAMINGpCodecCtx->widthpCodecCtx->height);
SDL_Rect rect;
SDL_Event event;
AVPacket *packet=(AVPacket *)malloc(sizeof(AVPacket));
av_new_pac
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-06-12 17:36 Debug\
文件 33792 2015-06-12 17:53 Debug\FFmpeg_10.exe
文件 415848 2015-06-12 17:53 Debug\FFmpeg_10.ilk
文件 609280 2015-06-12 17:53 Debug\FFmpeg_10.pdb
目录 0 2015-06-12 17:12 FFmpeg_10\
目录 0 2015-06-12 17:53 FFmpeg_10\Debug\
文件 13264 2015-06-12 17:53 FFmpeg_10\Debug\CL.read.1.tlog
文件 290 2015-06-12 17:53 FFmpeg_10\Debug\CL.write.1.tlog
文件 658 2015-06-12 17:12 FFmpeg_10\Debug\FFmpeg_10.exe.em
文件 724 2015-06-12 17:12 FFmpeg_10\Debug\FFmpeg_10.exe.em
文件 616 2015-06-12 17:53 FFmpeg_10\Debug\FFmpeg_10.exe.intermediate.manifest
文件 47 2015-06-12 17:53 FFmpeg_10\Debug\FFmpeg_10.lastbuildstate
文件 2763 2015-06-12 17:53 FFmpeg_10\Debug\FFmpeg_10.log
文件 29453 2015-06-12 17:53 FFmpeg_10\Debug\FFmpeg_10.obj
文件 208 2015-06-12 17:12 FFmpeg_10\Debug\FFmpeg_10_manifest.rc
文件 646 2015-06-12 17:53 FFmpeg_10\Debug\cl.command.1.tlog
文件 2 2015-06-12 17:53 FFmpeg_10\Debug\li
文件 2 2015-06-12 17:53 FFmpeg_10\Debug\li
文件 2 2015-06-12 17:53 FFmpeg_10\Debug\li
文件 2 2015-06-12 17:53 FFmpeg_10\Debug\li
文件 2 2015-06-12 17:53 FFmpeg_10\Debug\li
文件 2 2015-06-12 17:53 FFmpeg_10\Debug\li
文件 2 2015-06-12 17:53 FFmpeg_10\Debug\li
文件 2 2015-06-12 17:53 FFmpeg_10\Debug\li
文件 2 2015-06-12 17:53 FFmpeg_10\Debug\li
文件 2 2015-06-12 17:53 FFmpeg_10\Debug\li
文件 2 2015-06-12 17:53 FFmpeg_10\Debug\li
文件 2 2015-06-12 17:53 FFmpeg_10\Debug\li
文件 2 2015-06-12 17:53 FFmpeg_10\Debug\li
文件 2 2015-06-12 17:53 FFmpeg_10\Debug\li
文件 1978 2015-06-12 17:53 FFmpeg_10\Debug\li
............此处省略213个文件信息
- 上一篇:Win7开机动画275890
- 下一篇:全国行政省、市、县区、乡村GE地标地名
相关资源
- 是男人就下一百层
- vs2010 ffmpeg实时解码h264码流
- 图片-视频互换程序
- linux系统的二级文件系统(QT实现了简
- 设计一个用于人事管理的“人员”类
- 基于ffmpeg将avi视频转换为mp4视频
- Qt实现的简单的中国象棋程序
- 数据加密与数字签名系统
- Kinect手势代替鼠标控制PC
- 物业费管理系统源码超详细注释附文
- 长整数的代数计算 算法
- 二进制方式打包和解包文件
- 个人银行账户管理系统
- 使用ffmpeg将多张图片生成H264裸流并获
- OpenGL场景漫游
- VS开发进阶源码---烟花特效的生日祝福
- 资源管理器 中国地质大学数据结构
- 设停车场内只有一个可停放n辆汽车的
- vc写的一个游戏里面三维场景漫游
- 编程常用的素材(含png、jif、bmp、j
- Midas to FLAC3D-vs2010
- 直通BAT算法精讲
- ros小海龟定点移动程序
- 学生成绩档案管理系统—保证可用
- 面试算法LeetCode刷题班
- 交通咨询模拟系统
- Qt开机唤醒狩猎者
- 路由分组转发仿真系统的设计与实现
- 周立功CAN接口开发资料
- 仿QQ截图工具源代码
评论
共有 条评论