小试ffplay+MFC
来源:互联网 发布:周杰伦婚礼进行曲 知乎 编辑:程序博客网 时间:2024/06/01 08:12
最近想尝试一下ffplay,于是就动手做了一个播放器。
用的是ffmpeg-3.3.3编译出来的lib,参考了雷神的100行的最简单播放器。
废话不多说直接动手。
先创建了一个MFC项目,用的是对话框。
这中间插入了一个Picture Control用于显示视频
然后把ffplay项目移入MFC。解决冲突花了我将近1个多小时。
关键处:
//指定SDL显示在picture 控件window = SDL_CreateWindowFrom(g_pMyPlayer->GetView()->GetSafeHwnd());
这里的g_pMyPlayer是我的对话框的指针,GetView()是获得picture 控件的指针,最后的GetSafeHwnd()是获取句柄。这样就把视频输出到了控件上。
SDL_Event SDLevent;SDLevent.type = SDL_KEYDOWN;SDLevent.key.keysym.sym = SDLK_SPACE;SDL_PushEvent(&SDLevent);
这里是在点击暂停按钮时候发送的事件
相应的还做了停止按钮这里参照了雷神的代码,不能直接exit()。并做了如下的修改
static void do_exit(VideoState *is){ if (is) { stream_close(is); } if (renderer) SDL_DestroyRenderer(renderer); if (window) SDL_DestroyWindow(window); window = nullptr;//把window指针置空 av_lockmgr_register(NULL); uninit_opts();#if CONFIG_AVFILTER av_freep(&vfilters_list);#endif avformat_network_deinit(); if (show_status) printf("\n"); SDL_Quit(); av_log(NULL, AV_LOG_QUIET, "%s", ""); //exit(0);}
这里如果不把window指针置空,就会在再次点击播放时候出现只有声音没有影像。
这里我顺着程序查了很久,
static void video_display(VideoState *is){ if (!window)//这里 video_open(is); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderClear(renderer); if (is->audio_st && is->show_mode != SHOW_MODE_VIDEO) video_audio_display(is); else if (is->video_st) video_image_display(is);//还有这里 SDL_RenderPresent(renderer);}
终于发现在video_display函数中会判断window指针是否存在,然后在video_image_display函数中的realloc_texture函数失败,就返回了,就一直没有分配纹理。所以要把window = nullptr; 这样停止之后再点击播放就能有图像了。
阅读全文
1 0
- 小试ffplay+MFC
- ffplay for MFC
- ffplay for MFC
- ffplay for mfc 代码备忘
- ffplay for mfc 代码备忘
- ffplay for mfc 代码备忘
- ffplay for mfc 代码备忘
- ffplay for mfc 代码备忘
- ffplay for mfc 代码备忘
- ffplay播放器移植VC的工程:ffplay for MFC
- ffplay播放器移植VC的工程:ffplay for MFC
- ffplay播放器移植VC的工程:ffplay for MFC
- ffplay播放器移植VC的工程:ffplay for MFC
- ffplay
- MFC编程小技巧
- MFC小笔记
- mfc的小秘密
- mfc小技巧_0104
- solr搭建
- codeforces 828A Restaurant Tables
- Bigtable: A Distributed Storage System for Structured Data : part1 Abstract and Introduction
- MySQL之操作数据表
- 使用宏定义计算函数实参个数
- 小试ffplay+MFC
- mybatis的注解
- 关于C++中的输入一行问题
- hdu 1800
- Python 小程序
- 阿里面试回来,想和Java程序员谈一谈
- 丢手绢
- 深入Kotlin
- bzoj 4806: 炮