基于DirectShow的简单播放器
一 个简单的基于DirectShow的打开本地视频文件的例子。
参考了各种资材,网上很多,也比较简单,但有个问题就是在调用" RenderFile "函数时只有在x86下都会返回S_OK,很费解。。。待继续深入研究一下。
代码:
IGraphBuilder *gGraph = NULL;IMediaControl *gControl = NULL;IMediaEvent *gEvent = NULL;
bool CreateSimplerPlayer(PTSTR pstrFileName){// init comHRESULT hr = CoInitialize(NULL);if (FAILED(hr))return false;// init gragh builderhr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&gGraph);if (FAILED(hr))return false;// query controler interface in graphbuilderhr = gGraph->QueryInterface(IID_IMediaControl, (void**)&gControl);if (FAILED(hr))return false;// query event interface in graphbuilderhr = gGraph->QueryInterface(IID_IMediaEvent, (void**)&gEvent);if (FAILED(hr))return false;hr = gGraph->QueryInterface(IID_IBasicVo, (void**)&gVideo);if (FAILED(hr))return false; // read a filehr = gGraph->RenderFile(pstrFileName, NULL);if (!FAILED(hr)){hr = gControl->Run();if (SUCCEEDED(hr)){long evCode;gEvent->WaitForCompletion(INFINITE, &evCode);return true;}}return false;}
主要就是RenderFile,只要选择播放的文件,IGraphBuilder就智能地帮你构造出整个Filter Graph。
下面是在控制台程序中打开文件管理对话框的代码,选择好文件后将文件路径传给CreateSimplerPlayer。
代码:
TCHAR szBuffer[MAX_PATH] = { 0 };OPENFILENAME file = { 0 };file.hwndOwner = NULL;file.lStructSize = sizeof(file);file.lpstrFilter = _T("所有文件(*.*)\0*.*\0Exe文件(*.exe)\0*.exe\0");//要选择的文件后缀 file.lpstrInitialDir = _T("E:\\");//默认的文件路径 file.lpstrFile = szBuffer;//存放文件的缓冲区 file.nMaxFile = sizeof(szBuffer) / sizeof(*szBuffer);file.nFilterIndex = 0;file.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER;//标志如果是多选要加上OFN_ALLOWMULTISELECTBOOL bSel = GetOpenFileName(&file);//cout << file.lpstrFile << endl; SimplePlayer::CreateSimplerPlayer(file.lpstrFile);
转载于:https://www.cnblogs.com/-sev-/p/8385396.html
基于DirectShow的简单播放器相关推荐
- 基于directShow,打造全能播放器系列之一
总前言:我打算写一个能实现全能播放的播放器,功能比较简单,也算是抛砖引玉吧,因为内容较多,所以打算写三篇,这是开篇,欢迎大家吐槽 简易播放器的实现 本文的编写环境:visual studio 2008 ...
- 基于directShow,打造全能播放器系列之二
前言:这一篇,分为三个部分,第一部分是添加对简易播放器的补充,第二部分是解码器的安装.配置. 简易播放器的补充 主要内容:添加对双击全屏的代码 注意:有些朋友可能会想,这个有这么麻烦吗,直接添加对ID ...
- 音视频基础学习之【01.基于ffmpeg的简单播放器demo实现】
目录 1.项目配置 2.显示界面设计 3.视频解码显示 流程描述 4.演示 最近在学习音视频基础知识,在这里感谢雷神留下的一系列指引新手入门的宝贵资源,虽然他英年早逝,但他的硕果永存.不由感慨真是天妒 ...
- 基于Ffmpeg解码器的简单播放器(a simple audio player based on Ffmpeg)
这是一个基于Ffmpeg解码器的简单播放器,怎么在Windows上编译Ffmpeg可以在网上找到很多,开发环境是Windows XP SP3+VS2008,其中DirectSound控制单元来自jdk ...
- 如何用FFmpeg编写一个简单播放器详细步骤介绍
如何用FFmpeg编写一个简单播放器详细步骤介绍(转载) FFMPEG是一个很好的库,可以用来创建视频应用或者生成特定的工具.FFMPEG几乎为你把所有的繁重工作都做了,比如解码.编码.复用和解复用. ...
- 基于Qt的音乐播放器(二)切换歌曲,调节音量,调节语速,暂停
2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票! 我的投票地址:点击为我投票 文章目录 1.切换歌曲 2.调节音量 3.调节语速 4.播放/暂停 5.我们来看下效果 6.关于上一篇提 ...
- 基于QT实现Mp3播放器(代码部分)
前言 最近有一个课程实验,利用window上的API接口实现MP3播放器. 突发奇想,在linux下用相关接口做一个MP3播放器.最先的打算是完全使用纯C写的,但后来感觉编写调试实在费劲.于是 ...
- 基于FPGA的音乐播放器系统设计_kaic
摘 要 音乐播放器随处可见,广播.CD.MP3.车载播放器.智能家居等系统,都用播放器娱乐着我们的生活.FPGA以硬件描述语言完成的电路设计,具有运算速度快,编程简单又稳定性,长期维护,成本等优点,本 ...
- Android MediaExtractor + MediaCodec构建简单播放器
对于一个播放器,基本上可以分为以下模块:数据接收(网络/本地)->解复用->音视频解码->音视频同步->音视频输出. 今天我们介绍Android系统中提供的两个播放器模块Med ...
最新文章
- Java如何打印异常的堆栈?
- AfxInitExtensionModule和AfxTermExtensionModule
- 什么是npm package
- 《环形女人》:“穿透”与“征兆”(全文)
- python 排列组合_python 编写排列组合
- Docker容器开机自动启动
- PowerJob 应对庞大任务的锦囊妙计:MapReduce
- java mysql查询试题_2016年Java认证考试题
- u盘安全删除 linux,怎么安全删除U盘
- mysql索引一般什么数据结构_mysql索引一般使用什么数据结构
- 为什么苹果蓝牙耳机连上还是公放_史上最好用的蓝牙无线耳机?苹果AirPods神奇在哪里!...
- 微信摇一摇周边新功能上线
- python开发html_Python开发——16.HTML
- 关于报错An unexpected error occurred: “https://registry.yarnpkg.com/react: socket hang up“
- Java中的Hash值到底是怎么计算的
- java强制转换用法_Java入门课|这才是Java强制类型转换的正确使用方法,你真的会用这些吗...
- 【夜读】输与赢,在成长的面前都没那么重要
- 星汉未来成为 FinOps 产业标准生态联盟首批会员
- 猫盘群晖远程访问之Frp
- [ECharts] Component legend is used but not imported.