|
|
导航: |
论坛 -> 移动应用开发
斑竹:flyers,iamdream |
|
作者: |
|
2019/8/11 10:38:33 |
标题: |
XE10.3在安卓中播放不了MP4文件 |
浏览:3041 |
|
加入我的收藏 |
楼主: |
原来用10.2可以在安卓里面播放MP4视频文件的,10.3.1就播放不了,10.3.2也不能播放,各位高手有没有测试过?播放AVI可以,同样的软件如果用10.2编译,就可以播放。就是一个简单的播放MP4视频文件,打包在安装软件里面的。
----------------------------------------------
- |
作者: |
|
2019/8/11 11:15:30 |
1楼: |
权限问题吗?
----------------------------------------------
-
|
作者: |
|
2019/8/11 12:29:40 |
2楼: |
他们有个例程,播放视频的,在windows底下运行,哪个列表里面有MP4的,同样的文件,运行到安卓里面,哪个MP4的文件都不出现在列表里面了,可能真的取消了播放MP4的功能。
----------------------------------------------
-
|
作者: |
|
2019/8/11 16:49:56 |
3楼: |
会不会是安桌中文件位置不对了,所以不显示在列表中
----------------------------------------------
-delphi新资讯站 http://www.delphigear.cn
|
作者: |
|
2019/8/11 17:45:09 |
4楼: |
Windows底下和安卓底下路径不相同。
----------------------------------------------
-
|
作者: |
|
2019/8/11 20:51:10 |
5楼: |
我确定 10.3 可以播放 MP4,前几天刚试过。
----------------------------------------------
-
|
作者: |
|
2019/8/11 21:40:19 |
6楼: |
真的?是用MediaPlayer播放?
----------------------------------------------
-
|
作者: |
|
2019/8/11 21:43:40 |
7楼: |
回4楼,路径应该是知道没有错的,因为同样的代码在10.2下面编译的,在安卓里面运行是可以播放的。
----------------------------------------------
-
|
作者: |
|
2019/8/12 16:29:02 |
8楼: |
就是用 MediaPlayer 来播放 MP4 呀。
注意安卓版本,高版本安卓访问外部存储路径可能需要用代码动态申请权限。
----------------------------------------------
-
|
作者: |
|
2019/8/12 16:46:43 |
9楼: |
那读取图片怎么可以呢?就是视频MP4不行。都是一样的路径。
----------------------------------------------
-
|
作者: |
|
2019/8/12 17:58:59 |
10楼: |
有些人,自己做不到,就说 DLEPHI 做不到。
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
denddy (denddy) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2019/8/12 18:12:58 |
11楼: |
delphi自带的例子里面有播放MP4的,看看就知道了
----------------------------------------------
-
|
作者: |
|
2019/8/12 18:25:43 |
12楼: |
delphi自带的例子测试通过。
华为 Mate8,Android8.0,delphi 10.3.2
此帖子包含附件:
大小:86.7K |
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
|
作者: |
|
2019/8/12 20:12:32 |
13楼: |
那可能是机器的原因了,我用这个软件编译运行起来也是播放不了的。
----------------------------------------------
-
|
作者: |
|
2019/8/12 20:20:40 |
14楼: |
关键是我用10.2编译同样这个例程,是可以在同样的机器播放的
----------------------------------------------
-
|
作者: |
|
2019/8/12 21:12:45 |
15楼: |
换了一款机器,10.3.2可以了,但是10.3.1还是不行,报错,解决问题了。
----------------------------------------------
-
|
作者: |
|
2019/8/12 21:52:45 |
16楼: |
多谢大家的参与,我发现10.3.2对MediaPlayer改进还是不错的,我做一个安卓视频播放器,轮流播放,以前的版本,长时间运行以后,都会出错,但是10.3.2我长时间轮流播放几十个视频文件,还没有报过错,说明10.3.2,大家还是赶紧升级,确实修改了一些BUG。
----------------------------------------------
-
|
作者: |
|
2019/8/13 9:56:48 |
17楼: |
我看源码,明显使用了新的策略。 接口还是那些接口。但是用法变了。
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
|
2019/8/13 11:55:09 |
18楼: |
我仔细测试了10.3.2的MediaPlayer在安卓下面播放视频文件的功能,以前在10.1,10.2,10.3.1下面也测试过,以前只要播放多个视频文件,时间超过一定时间,就会报错,就停止了,当时我搞的项目就不敢用它来做,但是这次测试10.3.2给我很大惊喜,软件播放几十个视频文件,包括下载很大的视频文件,长时间运行,一直没有出任何错误,这样我就可以放心用delphi 10.3.2完成整个项目了,毕竟我还是最熟悉delphi嘛。
----------------------------------------------
-
|
作者: |
|
2019/8/13 12:01:12 |
19楼: |
10.3.2把Rectangle作为一个容器来使用了,就有点类似VCL的Panel,这个是以前的10.2版本不同的。
----------------------------------------------
-
|
作者: |
|
2019/8/13 12:18:32 |
20楼: |
FLibraryPath:=System.IOUtils.TPath.GetDocumentsPath; GetFileName:=System.IOUtils.TPath.Combine(FLibraryPath,GetFileName); if TFile.Exists(GetFileName) then begin try MediaPlayer1.Stop; MediaPlayer1.FileName:=GetFileName; MediaPlayer1.CurrentTime := 0; Timer3.Interval:=4000; Timer3.Enabled:=True; //指定播放文件后,不可以马上运行 MediaPlayer1.Play;必须要经过一点时间再运行 except end;
end; procedure TFormMain.Timer3Timer(Sender: TObject);
begin
try Timer3.Enabled:=False; MediaPlayer1.Play; except end; end;
轮流播放的要点,不知道我测试的是不是正确的方法,就是要切换播放文件的时候,必须要有个延迟,我现在是使用timer来延迟。
----------------------------------------------
-
|
作者: |
|
2019/8/13 17:18:57 |
21楼: |
楼上的,你碰到的这个必须要经过一点时间再运行的问题,我在 XE7 的时候碰到过。
目前我用 10.3.1 做测试,没发现这样的问题。
另外,之前因为 XE7 的 MediaPlayer 在安卓下播放视频有问题,俺就想了另外一招,直接调用系统本身的播放器来播放 MP4。这个保证不出问题。
具体做法见俺博客:
https://blog.csdn.net/pcplayer/article/details/99417638
----------------------------------------------
-
|
作者: |
|
2019/8/13 18:07:24 |
22楼: |
我们的做的项目,不能全部是播放视频的,就是一部分区域是视频,另外的区域还要做其他用途的,所以,不能用你的调用系统的播放器的方法,除非可以把系统播放器限定在一定的播放区域。
----------------------------------------------
-
|
作者: |
|
2019/8/13 18:43:46 |
23楼: |
目前我的测试结果:
10.3.1 编译的程序,MediaPlayer 安卓下播放 MP4: 1. 安卓5.0 播放不了,会出异常。如果你不想兼容旧手机就没事。 1.1. 安卓5.0 底下如果不显示视频,是能够播放的,能听到播放的声音,进度条显示也正常。 2. 安卓9.0 能够播放,但进度条不对。
----------------------------------------------
-
|
作者: |
|
2019/8/13 21:04:48 |
24楼: |
10.3.2 MediaPlayer 不支持 Win32 的 MP4 播放 报错 unsupported media file
----------------------------------------------
-
|
作者: |
|
2019/8/13 22:02:28 |
25楼: |
windows下建议使用PasLibVlcPlayer,没有比它更简单快捷了。
----------------------------------------------
-
|
作者: |
|
2019/8/14 9:17:43 |
26楼: |
24 楼,建议看看这个 提示是 哪一行 源代码给你的。
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
|
2019/8/15 18:49:23 |
27楼: |
WINDOWS 底下做播放器,最好自己用 DirectShow 来做,自由度最高,想咋做咋做。
DELPHI VCL 用 DirectShow 有一套控件:DsPack。
其实 FMX 底下,看源代码,windows 底下的 MediaPlayer 也是用的 DirectShow。
至于说 FMX 的 MediaPlayer 在 WINDOWS 底下播放 MP4 出现的不支持的媒体类型的异常,是因为 FMX 的代码只是简单地调用了 DirectShow 的自动播放功能,自动播放功能则自动去查媒体类型,然后根据媒体类型去查系统里面有什么解码器的 Filter 可以用来解码这个 MP4 文件,查到了就自动将一些 Filter 串接起来,开始播放。如果查不到它就返回这个异常。而 WINDOWS 系统默认没有支持 MP4,因此就出这个异常。
如果自己用 DsPack 这套控件,自己用代码串接 Filter 则肯定可以播放,只不过需要检测系统是否带了对应的解码器,如果没带,你可以给它安装啊。
比如,安装一套 DELPHI 直接可以用的解码器:ffDShow。
----------------------------------------------
-
|
作者: |
|
2019/8/15 18:53:27 |
28楼: |
然后,上面提到的 DsPack 要注意几个问题:
1. 它是开源的,官方没有持续更新,官方给出的控件,D7 可用,新的 DELPHI 版本需要对它做一些更改。
2. 解码器:基于 DirectShow 的解码器 Filter,ffDShow 也是开源的。
3. DsPack 是基于 VCL 的。你可以先在 VCL 底下做好一个播放器窗口,然后在你的 FMX 程序里面,把 VCL 窗口放进去。如何放进去,办法其实简单,网上也有人做了一套现成的框架可以直接拿来用。我记得在 github 看到过。如果想自己研究如何放进去,同样去参考 FMX 的 WINDOWS 版的 MediaPlayer 看看它是怎么把播放器窗口放到 FMX 的 FORM 上的。
----------------------------------------------
-
|
作者: |
|
2019/8/16 9:19:54 |
29楼: |
楼上,都要给系统安装 解码器了,我们还是继续用 FMX 控件吧。有了解码器,控件正常就可以了。
----------------------------------------------
(C)(P)Flying Wang
|
|