## Qt+ffmpeg+sdl简单播放器
## 2019-2-15
音视频同时播放,暂未进行音视频同步
sdl2声音播放原理见雷神:
https://blog.csdn.net/leixiaohua1020/article/details/40544521
## 2019-2-13
简单视频播放器(直接解码sdl渲染播放)
https://blog.csdn.net/FlayHigherGT/article/details/85690386
#### 基本流程解析:
pFormatCtx = avformat_alloc_context();
首先给上下文分配内存
ret = avformat_open_input(&pFormatCtx, filePath, NULL, NULL);
之后打开媒体文件,这里面应该会将媒体格式信息存储在上下文中
av_dump_format(pFormatCtx, 0, filePath, 0);
这里可以打印出媒体格式的详细信息
ret = avformat_find_stream_info(pFormatCtx, NULL);
在上下文中寻找视频流信息
videoindex = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);
这里是找到视频流的index标志号
avStream = pFormatCtx->streams[videoindex];
设置avstream这个东西
g_frame_rate = avStream->avg_frame_rate.num / avStream->avg_frame_rate.den;
这里可以设置一下帧率
pCodecCtx = avcodec_alloc_context3(NULL);
这里打开解码器上下文
ret = avcodec_parameters_to_context(pCodecCtx, pFormatCtx->streams[videoindex]->codecpar);
将媒体信息的参数传入解码器上下文
pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
在解码器上下文中找到解码器
ret = avcodec_open2(pCodecCtx, pCodec, NULL);
打开解码器
screen_w = pCodecCtx->width;
这里可以从解码器上下文中获取到解码视频的宽
screen_h = pCodecCtx->height;
这里可以从解码器上下文中获取到解码视频的高可以给渲染窗口用
packet = av_packet_alloc();
av_init_packet(packet);
分配一下视频一帧的压缩包数据结构,并初始化
pFrame = av_frame_alloc();
分配解码后的一帧数据的数据结构
while(1)
{
//这里是不断读取需要解码的包送到解码器里面
ret = av_read_frame(pFormatCtx, packet); 这里while进行循环读取
1、ret < 0 没有包可以读,可以结束循环
2、ret == 0 && packet->stream_index != videoindex 这里表示没有读取到视频流
3、ret == 0 {//这里表示正常的视频包
avcodec_send_packet(pCodecCtx, packet);//这里发送要解码的数据到解码器上下文中
}else
{
av_packet_unref(packet);// 如果还占用内存则释放
ret = avcodec_send_packet(pCodecCtx, packet);这里如果不是0的话需要刷一个空包进去
}
//这里是读取解码器里面需要解码的包进行解码
do{
ret = avcodec_receive_frame(pCodecCtx, pFrame);
1、ret == 0 表示成功,可以从pFrame中读取到解码帧数据送到渲染器渲染
2、ret == AVERROR(EAGAIN) 说明没有可读的解完的帧数据
3、ret == AVERROR_EOF 说明没有帧了
avcodec_flush_buffers(pCodecCtx);// YUV 1920*1080*1.5*5个buffer 这里需要做一个刷新
}while(ret != AVERROR(EAGAIN))一直读取知道没有可渲染的帧
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于Qt+ffmpeg+sdl的简单播放器.zip
共253个文件
h:183个
c:24个
lib:14个
0 下载量 124 浏览量
2024-08-21
12:06:45
上传
评论
收藏 9.24MB ZIP 举报
温馨提示
项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全栈开发),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助 【资源内容】:项目具体内容可查看/点击本页面下方的*资源详情*,包含完整源码+工程文件+说明(若有)等。【若无VIP,此资源可私信获取】 【本人专注IT领域】:有任何使用问题欢迎随时与我联系,我会及时解答,第一时间为您提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【适合场景】:相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可基于此项目来扩展开发出更多功能 #注 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担 2. 部分字体及插图等来自网络,若是侵权请联系删除,本人不对所涉及的版权问题或内容负法律责任。收取的费用仅用于整理和收集资料耗费时间的酬劳 3. 积分资源不提供使用问题指导/解答
资源推荐
资源详情
资源评论
收起资源包目录
基于Qt+ffmpeg+sdl的简单播放器.zip (253个子文件)
libavcodec.dll.a 657KB
libavdevice.dll.a 412KB
libavutil.dll.a 336KB
libavfilter.dll.a 151KB
libavformat.dll.a 138KB
libswscale.dll.a 22KB
libswresample.dll.a 15KB
libpostproc.dll.a 7KB
transcode_aac.c 34KB
transcoding.c 22KB
muxing.c 21KB
demuxing_decoding.c 14KB
filter_audio.c 12KB
filtering_audio.c 10KB
vaapi_transcode.c 9KB
filtering_video.c 9KB
qsvdec.c 8KB
resampling_audio.c 8KB
hw_decode.c 8KB
vaapi_encode.c 7KB
encode_audio.c 6KB
remuxing.c 6KB
extract_mvs.c 6KB
avio_dir_cmd.c 5KB
encode_video.c 5KB
decode_audio.c 5KB
decode_video.c 5KB
http_multiclient.c 5KB
scaling_video.c 5KB
avio_reading.c 4KB
ffmpeg_purse_mp4.c 3KB
metadata.c 2KB
sonic.cpp 42KB
audio_output.cpp 19KB
main.cpp 15KB
packet_queue.cpp 3KB
util_time.cpp 838B
log.cpp 715B
avutil-56.def 12KB
avcodec-58.def 6KB
avformat-58.def 4KB
avfilter-7.def 2KB
swscale-5.def 756B
avdevice-58.def 544B
swresample-3.def 473B
postproc-55.def 223B
SDL2.dll 1.13MB
SDL2.dll 982KB
Qt+FFMPEG4.0 Windows开发环境搭建.docx 1MB
source.200kbps.768x320.flv 6.33MB
.gitignore 20B
SDL_opengl.h 622KB
avcodec.h 207KB
SDL_opengles2.h 129KB
avformat.h 115KB
avfilter.h 41KB
SDL_haptic.h 38KB
opt.h 35KB
SDL_video.h 33KB
SDL_render.h 32KB
pixfmt.h 32KB
avio.h 31KB
frame.h 28KB
SDL_events.h 26KB
mem.h 23KB
hwcontext.h 22KB
swresample.h 21KB
SDL_audio.h 20KB
SDL_surface.h 18KB
intreadwrite.h 18KB
avdevice.h 17KB
common.h 16KB
SDL_hints.h 16KB
pixdesc.h 15KB
SDL_pixels.h 15KB
SDL_scancode.h 15KB
SDL_keycode.h 14KB
avstring.h 14KB
SDL_stdinc.h 14KB
SDL_test_fuzzer.h 13KB
swscale.h 12KB
imgutils.h 11KB
log.h 11KB
SDL_assert.h 10KB
buffer.h 10KB
SDL_gamecontroller.h 10KB
samplefmt.h 10KB
SDL_thread.h 10KB
channel_layout.h 9KB
avutil.h 9KB
SDL_atomic.h 9KB
hash.h 8KB
dict.h 8KB
SDL_joystick.h 8KB
spherical.h 8KB
mathematics.h 8KB
sonic.h 8KB
bprint.h 8KB
parseutils.h 7KB
SDL_mouse.h 7KB
共 253 条
- 1
- 2
- 3
资源评论
热爱技术。
- 粉丝: 2556
- 资源: 7861
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功