DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: ZMskyuza
今日帖子: 28
在线用户: 13
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 jacky19451685 (jacky168) ▲△△△△ -
普通会员
2024/5/11 12:51:51
标题:
delphi里的 windows media player 的满窗口显示的问题 浏览:672
加入我的收藏
楼主: 在delphi中(目前用的delphi11)加入windows media player控件 ,实现视频正常播放,但如果控件的长宽比例和视频的长宽比例不一致,那么会出现左右或上下的黑色视频边框, 如何设置, 才能使视频拉伸填充满播放窗口,当然后果就是视频被拉伸变形。
求教各位!!
此帖子包含附件:
JPEG 图像
大小:186.0K
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/12 3:34:57
1楼: 控件本身可能没有提供相关的属性或者方法。那么,使用这个控件就没有办法了。

如果你使用 FMX, 它的 MediaPlayer 在 Windows 底下,使用的是 DirectShow;

基于 DirectShow 来播放视频的话,自己可以控制的东西很多。但 FMX 本身的封装可能比较厉害,暴露出来的东西不一定有那么多,比如调整显示比例。

那么,如果你直接用 DirectShow 的话,你就可以随便搞了。包括显示比例,甚至你可以随便搞字幕上去。

如果要自己搞 DirectShow 的话,有一套开源的控件,我的 github 里面有:
https://github.com/pcplayer/Dspack

我在 csdn 里面也上传了一份:
https://download.csdn.net/download/pcplayer/5600331
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2024/5/12 12:39:49
2楼: dspack已经很久不更新了吧?初始的dshow接口比较原始,我记得只有一个设置播放区域的函数,如果封装成控件的话应该会很不一样。
----------------------------------------------
--
作者:
男 bighawk (Hawk) ★☆☆☆☆ -
盒子活跃会员
2024/5/12 16:05:59
3楼: 现在比较流行的是用 FFMpeg,基本上的通用解码格式都支持;
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/12 20:47:37
4楼: dspack 不需要更新了。因为微软已经把 DirectShow 放进底层了,不提倡直接使用 DirectShow。

但如果能够使用 DirectShow,还是很有自由度的。比封装后的上层,更多自由度。

封装得最典型的就是 Delphi 提供的 MediaPlayer,没什么可以设置调整的,用起来简单,可以修改的功能自然就少了。自由度太多,用起来自然就麻烦了。

但如果真正搞懂了,用起来也没有很麻烦。

Dspack 封装的几个控件,用起来还是非常好用的。现在的问题是,微软不推 DirectShow,就没人去做基于 DirectShow 的 Filter 了,就少了很多现成的可以用的库。

其实,基于 DirectShow 的 Filter 的格式的库,非常好用。根本不需要看文档,直接在 GraphEdit 里面拉线就能把它用起来。

这玩意之所以被微软废掉,其实是因为大多数程序员搞不懂它的底层逻辑。大多数程序员搞不懂是因为微软的文档写得太烂,市面上的书也写得太烂。
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2024/5/12 23:36:39
5楼: 嗯,现在如果要用dshow来做播放的话资源太少了。好像ffdshow这套也有10多年不更新了。
最新的265、266以及av1好像是没有公开的dshow filter了。
现在除非做游戏引擎,不然还真没多少人去折腾这个了。
我觉得愿意折腾的话,就像3楼那样,干脆去研究ffmpeg,其实也就几个库。当然要翻译进delphi的话有点麻烦,可以去搜一下看有没有人已经做过相关工作。
要么干脆内嵌其他播放器也是可以的。
media player我记得是用的windows media player,这个似乎也是个叔叔不疼、姥姥不爱的货。

如果换做我的话,还是喜欢挂个cef3,用html作ui,更新又方便,效果又炫酷。挺好的。
----------------------------------------------
--
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/13 1:22:09
6楼: ffdshow 我昨天去下载了一下,发现最新更新是 3 个月前。

ffmpeg 主要是裁剪起来麻烦,尤其是对 Delphi 程序员来说,裁剪编译都是个问题。
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2024/5/13 2:18:14
7楼: 哎,不对啊,我看的最后一次更新时间是2013年5月9号啊。
难道我找错了?
https://sourceforge.net/projects/ffdshow/
https://sourceforge.net/projects/ffdshow-tryout/
不是这两个地址么?

两个都有十多年没更新过了,还是我找错主页了?

至于ffmpeg,这东西主要是同步以及播放控制有点麻烦。我记得它是音视频分开控制的,音频、视频都有单独的接口,尤其是视频,每一帧返回回来都是一个位图,有点dshow底层接口的感觉。所以同步以及暂停、快放、慢放一类的控制比较难搞。
----------------------------------------------
--
作者:
男 jacky19451685 (jacky168) ▲△△△△ -
普通会员
2024/5/13 16:32:20
8楼: 网上倒是有个牛人在做FFMPEG的delphi控件, 只不过windows media player控件 难道真就做不到消除那个黑色边框了么?
----------------------------------------------
-
作者:
男 neptune_hsu (海神尼普頓) ▲▲▲▲▲ -
普通会员
2024/5/13 17:26:56
9楼: 有些可以從 decoder 設定,我是用K-Lite Codec Pack ,有可以設定的參數,多年前做過確定有,但參數名我想不起來,設定完後影像就可以填滿
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2024/5/13 21:32:46
10楼: 高版本的视频应用是可以随意填充窗口的。不过没折腾过。
实在不行就用dshow吧,就一个还是两个接口,像上面大神说的,引入dspack以后连翻译都不用,直接调用就行。而且还有demo可以照着抄。
就是com组件嘛,有时候会有些乱七八糟的问题,不过都不大,除非你要挂字幕或者挂特效这类比较麻烦。只对付着播个视频没问题。
当然,还是跟我说的一样,无法播放265、266、AV1等这些比较新的编码格式的视频。
----------------------------------------------
--
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/13 23:01:12
11楼: 我以前用 DirectShow 是因为有很多第三方的 Filter 是现成的,直接用。比如你安装了某个带多媒体的程序或者游戏,它就给你的系统里面安装了某个 Filter,就可以直接拿来用。

DirectShow 还有个比较牛逼的地方,就是它的显示,也是 Filter,是 Windows 本身提供的 Render,DsPack 封装了两个,直接拖控件到屏幕上就能用。其中一个功能强大,叠字幕,任意缩放(按比例或者不按比例都可以),不按比例缩放就可以填充满整个窗口了。这些都是简单的设置,不需要写代码。

现在的问题是,某个文件格式,比如 MP4,找不到 Filter 去解析它了。我记得以前是可以用 DirectShow 播放 MP4 的,可能新的系统里面没人提供对应的 Filter 了。

文件格式解析以后,就是逐祯的解码 -- 对于 264 是有解码器 Filter 的,265 可能就没人做了。

有文件解析和解码的 Filter,剩下的就非常简单了。

另外,假设自己使用代码,调用 FFMPEG 可以获得解码后的每一帧的数据,也可以使用 DirectShow,把每一帧的数据,通过 PushSource Filter 送进去就可以。播放速度还可以自己控制。这样做的好处是可以利用 DirectShow 里面系统提供的渲染(显示到屏幕),就可以用上我前面说的那些叠字幕、任意缩放等功能。

PushSource Filter 在 DsPack 里面有一个 Demo 是 Delphi 的代码,直接拿它的代码来编译就可以使用。当然要用好,得自己改写一些东西。我就改过。
----------------------------------------------
-
作者:
男 tjwhf (tjwhf) ▲▲▲▲△ -
普通会员
2024/5/14 7:56:15
12楼: 用迅雷的aplayer sdk  http://aplayer.open.xunlei.com/
ds的那个需要很多filter,难用的很
----------------------------------------------
-
作者:
男 tjwhf (tjwhf) ▲▲▲▲△ -
普通会员
2024/5/14 7:59:00
13楼: 要上难度用ds的话,LAV Filters是必选
----------------------------------------------
-
作者:
男 tjwhf (tjwhf) ▲▲▲▲△ -
普通会员
2024/5/14 9:57:25
14楼: lav filters就是封装ffmpeg,用于ds下面的filter,几乎可以万能解码,h265也可以硬解
ffmpeg有delphi版的头文件,发布时只需要带几个ffmepg的dll库
ffmpeg难搞的是硬解,软解很简单,用ffmpeg+sdl库就可以搞定音视频的同步播放,硬解很麻烦
----------------------------------------------
-
作者:
男 tjwhf (tjwhf) ▲▲▲▲△ -
普通会员
2024/5/14 9:58:19
15楼: https://bbs.2ccc.com/topic.asp?topicid=589423
我写的ffmpeg播放例子
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/14 10:28:12
16楼: FFMPEG 支持的硬件,我猜应该是它的代码自己实现,我们只要去用就好了,为啥还很麻烦?莫非针对不同的 GPU 还需要额外写一些代码?
----------------------------------------------
-
作者:
男 chencong5025 (Nicosoft) ▲▲▲△△ -
普通会员
2024/5/14 11:24:51
17楼: 所以说一千道一万

Delphi没有好用的 视频播放 组件/库
----------------------------------------------
-
作者:
男 tjwhf (tjwhf) ▲▲▲▲△ -
普通会员
2024/5/14 16:42:27
18楼: ffmpeg只负责音视频字幕的解码啊,解码后的音视频数据需要自己写播放代码,音视频同步也需要自己实现
那个迅雷aplayer sdk很好用的,自己做个播放器很容易的
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/14 20:31:56
19楼: 如果前面解码都搞定了,我自己的 Delphi 程序能拿到每一帧,剩下的播放显示就没那么复杂了。有一个比较麻烦的是如果 FFMPeg 输出的是 YUV,要转换为 RGB 如果没有硬件支持全靠软件,手机上可能跑起来比较耗时。电脑上再耗时 CPU 能力也顶得住。
----------------------------------------------
-
作者:
男 tjwhf (tjwhf) ▲▲▲▲△ -
普通会员
2024/5/15 7:08:10
20楼: h264的软解,cpu利用率20%以上,硬解2%以下,h265的话,软解cpu会给拉爆;还会卡、
硬解需要了解dxva2/d3d11va
----------------------------------------------
-
作者:
男 dbyoung (dbyoung) ★☆☆☆☆ -
普通会员
2024/5/15 8:06:45
21楼: FFMPEG 之 DXVA2 硬解
----------------------------------------------
武汉天气不好
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2024/5/15 9:16:56
22楼: 为什么不用ffmpeg? Q套参数啊.
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/15 16:09:38
23楼: https://github.com/FactoryXCode/MfPack

这个有人用吗?
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2024/5/15 16:13:21
23楼: 我觉得如果你的播放量大的话,还是挂CEF3,用html播比较好。
现在的解码市场,大概就是264、265、266以及vp9、av1两派,vp9与av1都是免费开放的,cef天然就支持了。264、265如果你不在乎版权问题,只要你调整一下源码重新编译就可以支持。
而且UI方面,html5的也比delphi能找到的资源多太多。效果呈现也更好。
----------------------------------------------
--
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/17 1:18:18
24楼: https://github.com/FactoryXCode/MfPack  这个我测试了一下,能用,很不错。
----------------------------------------------
-
作者:
男 tjwhf (tjwhf) ▲▲▲▲△ -
普通会员
2024/5/17 7:52:56
25楼: 这个支持的格式可能有限制吧
----------------------------------------------
-
作者:
男 tjwhf (tjwhf) ▲▲▲▲△ -
普通会员
2024/5/17 8:03:13
26楼: 在Delphi下使用迅雷APlayer组件进行免注册开发
https://www.cnblogs.com/dpower/p/6775086.html
----------------------------------------------
-
作者:
女 downtyzc (downtyzc) ★☆☆☆☆ -
普通会员
2024/5/19 11:33:49
27楼: 忠告:简单播放视频,千万不要考虑用ffmpeg。如果播放高码率的4k、8k视频,或者要求对帧进行处理,那才需要用ffmpeg自己做。基本上这需要硬解,然后直接走gpu渲染。不同显卡,得用不同的解码器。要是android,ios怎么办?这个也得考虑。不要考虑ffmpeg自己的硬解,鸡肋,你没办法拿到gpu数据,只能拷贝到host,还有可能比软件慢。软解能播,但是cpu使用太高,而且渲染也得走gpu渲染,否则卡成ppt。在实现过程中,读、音频解码,视频解码都得各自一个线程,内存、显存都要同步。如果是提供一个库供其他人使用,那么播控非常麻烦,因为你不能知道调用者怎样使用。更不要说播放器还有其他的需求。对于视频,视频帧是内部推出还是调用者自己拉取,各有利弊,如果要想库好用,两个都要提供。所以,不是专业搞视频方面的,不要考虑用ffmpeg。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行85.9375毫秒 RSS