本文介绍一个自己做的FFPLAY移植到VC下的开源project:ffplayfor MFC。本project将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下。而且使用MFC做了一套简单的界面。它能够完毕一个播放器播放视频的基本流程:解协议,解封装,视频/音频解码,视音频同步,视音频输出。

此外还包括一些控制功能:播放,暂停/继续,前进,后退,停止,逐帧播放。全屏等;以及一些简单的视频码流分析功能:视频解码分析和音频解码分析。

通过本程序能够学习视频播放器原理,以及SDL和Windows消息机制。

平台:VC2010

类库:FFmpeg。MFC

项目主页

SourceForge:https://sourceforge.net/projects/ffplayformfc/

Github:https://github.com/leixiaohua1020/ffplaymfc

开源中国:http://git.oschina.net/leixiaohua1020/ffplay-for-MFC

CSDN项目下载

ffplay for MFC 1.0.0(stable)——本版本号採用FFmpeg的2012年的类库,稳定

http://download.csdn.net/detail/leixiaohua1020/7452437

ffplay for MFC 1.0.1——本版本号採用FFmpeg的2014年5月的类库,支持HEVC和VP9。Debug下稳定。Release下眼下还有问题。

http://download.csdn.net/detail/leixiaohua1020/7452493

注:Release下的问题已经得到网友建议而且解决。解决方法例如以下:

VCproject属性里,linker->Optimization->References 选项。改成No(/OPT:NOREF)。

注:以上两个项目因为失误。少了一个SDL.dll文件,去SDL官网

http://www.libsdl.org/download-1.2.php

下载一个Runtime Libraries就可以

补充:

该项目原代码简单介绍能够參考:ffplay for mfc 代码备忘

更新记录==============================

1.1版(2014.7.10)
 * 更换了部分界面

* 原project支持Unicode编码

* 修复了Release下的Bug

* 加入了两个宏定义"INT64_MIN INT64_MAX",在没有安装 Win7SDK的情况下。可能会出现找不到定义的情况。

CSDN上又上传了一份:http://download.csdn.net/detail/leixiaohua1020/7764509

PUDN上也传了一份:http://www.pudn.com/downloads644/sourcecode/multimedia/detail2605167.html

一. 主界面

程序的主界面如图所看到的。最上方是输入的URL。中间是视频的參数列表。

下方是视频的控制button。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpeGlhb2h1YTEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

1.1输入URL

输入URL框用于输入视频的URL。

视频源能够是本地视频或者是网络流。单击输入框右側的“文件”button能够方便地选择本地的文件并获取他们的URL(在这里是路径信息)。

此外。也能够将本地视频文件直接拖拽到对话框中。也能够获取到该视频的URL。

1.2參数列表

封装格式參数

输入类型:输入视音频採用的传输协议。举例:RTP,FILE(文件),HTTP,RTMP。

封装格式:视音频採用的封装格式。举例:AVI。FLV,MKV。RMVB。

比特率:视音频的码率。

举例1Mbps。

时长:视音频的时间长度。

MetaData:视音频元数据信息。

视频參数

输出像素格式:解码后像素数据格式。举例:YUV420P。RGB24,UYVY。

编码方式:视频採用的压缩编码标准。举例:H.264。MPEG2。

帧率:每秒钟视频画面数。举例:25fps。

画面大小:画面的分辨率。举例:1920x1080,720x576。

解码分析:以列表的形式显示每一个视频帧的具体信息。

音频參数

採样率:每秒钟採样点个数。

举例:44.1kHz,48kHz。

编码方式:音频採用的压缩编码标准。举例:AAC。MP3。WMA。

声道数:声道数量。

解码分析:以列表的形式显示每一个音频帧的具体信息。

1.3控制button

控制button包括了:開始。后退。暂停/继续,前进,停止,逐帧播放,全屏。

此外,这一排控制button的上方,包括了视频播放的进度条。能够通过拖动进度条控制视频的播放。

二. 视频播放窗体

视频播放採用SDL显示。

三. 视频解码分析窗体

视频解码分析窗体列表显示了每一个视频帧的一些信息:序号,帧类型,关键帧。码流序号。PTS。当中不同的帧类型使用不同的背景色标识出来:I帧使用红色,P帧使用蓝色,B帧使用绿色。

如图所看到的。

四. 音频解码分析窗体

音频解码分析窗体列表显示了每一个音频帧的一些信息:序号,大小,PTS等。如图所看到的。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpeGlhb2h1YTEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

五. 系统支持信息窗体

系统支持信息窗体列表显示了系统的支持信息。包括系统支持的:协议,封装格式,视频解码器。音频解码器。以及其它解码器(字幕解码器)。比如协议列表如图所看到的。从中能够看出本程序支持的协议类型包括http,file。mms,rtp等等。

比如从封装格式列表中。能够看出系统支持flv等封装格式。每一个列表包括了序号,简称。全称。扩展名,私有数据大小等信息。

六. 菜单

程序上端的菜单中包括了更丰富的选项。一共分成6部分的功能:文件,播放控制。播放窗体。视图,语言。帮助。以下分别介绍。

文件:文件的打开。

播放控制:视频播放过程中的控制功能。包括:播放,暂停/继续。停止,逐帧播放,全屏。此外包括了多种快进快退操作:快进10秒,1分,10分;快退10秒。1分,10分。

播放窗体:与播放窗体有关的各种选项。能够设置播放窗体显示的内容,以及窗体的大小,纵横比。播放窗体默认是显示视频画面。此外还能够图形化的显示音频的信息,包括音频的波形图,以及音频的RDFT变换图。

音频波形图显示效果如图所看到的:

音频的RDFT变换图显示效果如图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpeGlhb2h1YTEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

视图:包括程序中的几个窗体。包括视频解码分析窗体,音频解码分析窗体,系统支持信息窗体。

语言:包括程序支持的几种语言。

帮助:包括程序的支持信息。

七. 英文界面

系统的英文界面如图所看到的。

以后有机会能够添加其它语言。

主界面

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpeGlhb2h1YTEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

视频解码分析窗体

音频解码分析窗体

系统支持信息窗体

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpeGlhb2h1YTEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

项目主页
SourceForge:https://sourceforge.net/projects/ffplayformfc/
Github:https://github.com/leixiaohua1020/ffplaymfc
开源中国:http://git.oschina.net/leixiaohua1020/ffplay-for-MFC

ffplay播放器移植VC的project:ffplay for MFC的更多相关文章

  1. ffplay播放器移植VC的工程:ffplay for MFC

    本文介绍一个自己做的FFPLAY移植到VC下的开源工程:ffplayfor MFC.本工程将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下.并且使用MFC做了一套简单的 ...

  2. ffmpeg转码器移植VC的project:ffmpeg for MFC

    本文介绍一个自己做的FFMPEG移植到VC下的开源project:ffmpeg for MFC.本project将ffmpegproject中的ffmpeg转码器(ffmpeg.c)移植到了VC环境下 ...

  3. 零基础读懂视频播放器控制原理——ffplay播放器源代码分析

    版权声明:本文由张坤原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/535574001486630869 来源:腾云阁 ht ...

  4. 视频播放器控制原理:ffmpeg之ffplay播放器源代码分析

    版权声明:本文由张坤原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/535574001486630869 来源:腾云阁 ht ...

  5. [Linux][Madplay播放器移植mini2440(ARM9)]

    Madplay移植到mini2440全过程详解 madplay交叉编译 交叉编译器:arm-linux-gcc 3.4.1PC环境:RedHat-6 注意:最好在root权限下执行以下移植,否则在ma ...

  6. ffmpeg转码器移植VC的工程:ffmpeg for MFC

    本文介绍一个自己做的FFMPEG移植到VC下的开源工程:ffmpeg for MFC.本工程将ffmpeg工程中的ffmpeg转码器(ffmpeg.c)移植到了VC环境下.并且使用MFC做了一套简单的 ...

  7. 仿迅雷播放器教程 -- 十年经验大牛对MFC的认识 (7)

    由于上一个教程做界面用的是MFC,所以这里不得不说一下MFC的历史,请看正文:   原文链接:http://blog.csdn.net/sunhui/article/details/319551 作者 ...

  8. 把类完善了一下,播放器也完善了一下,纯MFC与WinMM的产物

  9. Win7 VS2017简单编译FFMPEG播放器FFPlay

    Win平台简单编译FFPlay播放器,顺便纪念下雷霄骅,一年前刚学FFMPEG时还看过他的博客,昨晚再次搜FFMPEG文章时才知道人已经走了... 做成了视频放到B站 https://www.bili ...

随机推荐

  1. chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息

    chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--ad ...

  2. npm install 装本地一直安装全局问题

    想用npm安装一些模块,不管怎么装,一直装作全局. 以为是node有问题,重装了N次,却还发现这个问题. 困惑几天无果, 偶然间通过此文章发现,npm存在配置文件:https://www.sitepo ...

  3. python抓取链家房源信息(二)

    试着用scrapy将之前写的抓取链家网信息的重新写了写 然后先是用了第一页的网页作为测试,调试代码,然后发现总是抓取的时候遇见了 类似于这样的问题,并且抓取不到信息 2017-03-28 17:52: ...

  4. redis关闭保护模式

    1. set key出现的报错 在192.168.56.57客户端登录192.168.56.56的redis服务器时,报错如下: [root@localhost src]# ./redis-cli - ...

  5. [实战]MVC5+EF6+MySql企业网盘实战(16)——逻辑重构3

    写在前面 本篇文章将新建文件夹的逻辑也进行一下修改. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5 ...

  6. Oracle中生成uuid的方法

    Oracle中生成uuid的方法 下载LOFTER客户端 在Oracle SQL 提供了一个生成uuid的函数sys_guid: http://download.oracle.com/docs/cd/ ...

  7. docker 解决network has active endpoints

    解决方式 使用 docker network disconnect -f {network} {endpoint-name},其中的 {endpoint-name} 可以使用命令 docker net ...

  8. XML DOM(Document Object Model)

    1.XML DOM 是用于获取.更改.添加或删除 XML 元素的标准.2.节点(XML 文档中的每个成分都是一个节点):        整个文档是一个文档节点:        每个XML元素是一个元素 ...

  9. `__pycache__` 是什么

    为了提高模块加载的速度,每个模块都会在 __pycache__ 文件夹中放置该模块的预编译模块,命名为 module.version.pyc, version 是模块的预编译版本编码,一般都包含 Py ...

  10. 如何安装及使用PuTTY

    http://www.ytyzx.net/index.php?title=%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8 ...