Delphi MediaPlayer Android 的问题 之二

MediaPlayer 播放在线音频卡死 近来项目中有播放音频的需求,于是想用MediaPlayer先写个Demo; 布局代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_par 阅读详情

这几天都在折腾 Delphi FireMonkey MediaPlayer 在安卓下的问题。

查源代码,这个 MediaPlayer 也是封装了安卓的 MediaPlayer,播放界面使用了安卓的 View 。

人生就是打怪过关。这里好多关,最后还是过不了:

1. 上一篇文章里提到的,第一次播放后,关闭 MediaPlayer,然后给它设置新的视频文件名,然后播放,却播放不起来的问题。通过使用 Timer 后来我使用 TTask.Run 的线程,将启动播放的代码,在线程里面,加上 Sleep 的等待,问题解决了。算是绕过去了。过了一关。

2. 原本是在一个 Form 里面放 MediaPlayer,需要播放的地方,调用这个 Form,弹出这个 Form 然后启动播放。用户可以点 Form 上的按钮停止播放,关闭 Form。这样在架构上比较好,相当于把 MediaPlayer 封装到一个 Form 里面去。任何地方需要播放视频,调用这个 Form 就好了。然后发现一个严重问题:播放视频后,用户点击 Form 上的按钮,关闭 Form,回退到上一层界面后,上一层界面倒是显示出来了,但手指触摸点击界面里的元素,不响应了。仔细观察,就是播放视频时,视频窗口覆盖位置的界面元素不响应手指点击。视频窗口没有覆盖到的部分,没有这问题。我这里说的视频窗口覆盖的位置是指屏幕范围,这时候视频窗口已经关闭不存在了。我把 MediaPlayer 释放掉也没解决这个问题。

2.1. 后来发现,如果把 MediaPlayerControl 放到一个 TabItem 里面,切换 TabItem 的方式,关闭当前视频回到上一层界面,仅仅是切换一下 TabItem,不会导致上一层界面中的元素不响应点击。算是过了一关。

3. 视频播放,要实现横屏和竖屏的切换。切换倒是可以切换,切换为横屏以后,再切换回竖屏,界面卡住,好半天才刷新正常,然后界面元素不响应点击的问题再次出现。

4. 任何叠放在视频播放窗口(MediaPlayerControl)上面的控件,视频播放开始后,都无法看见,也无法点击。没办法在视频画面上叠加一些操作按钮。

总之,在安卓下,这个 MediaPlayer 没法用。除非你只播放一个简单小视频,不需要转换为横屏做全屏播放。

因此,最终还是决定采用直接安卓的 TJIntent 来播放视频文件。这个方法之前试过,也有一些问题。当时的问题是:视频播放启动了,但点击屏幕左上角的回退按钮,关闭视频播放窗口时,偶尔会将 APP 的界面也关闭。

上网查,发现:这里有一个说法启发了我

里面有一句:Note: "SharedActivity" has been deprecated (at least in 10/Seatle). The replacement seems to be "TAndroidHelper.Activity"

我之前的代码确实是使用 SharedActivity。改为使用 TAndroidHelper.Activity 后,确实可以正常播放视频,正常退出视频播放了。

可以结束这篇博客了。在安卓下,播放一个 MP4 的视频文件,不要使用 FireMonkey 的 MediaPlayer,它很不正常。使用以下方法:


    uri := StrToJURI('file://' + AURI);
    Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW);
    intent.setDataAndType(uri, StringToJstring('video/mp4'));
   
    {-----------------------------------------------------------------------
      以下代码,使用 SharedActivityContext 会导致视频播放时,点回退按钮,不单关掉了视频界面,连调用视频界面的界面都会被关掉(有时候,不确定)
      改为 TAndroidHelper.Activity 以后,多次测试,可以正确关掉视频界面回到原来界面。
    -----------------------------------------------------------------------}
    //SharedActivityContext.startActivity(Intent);
    TAndroidHelper.Activity.startActivity(Intent);  //pcplayer 2018-4-11

delphi fmx android下播放网络视频MP4的方法 后来想到用webbrowser播放,android12测试通过,windows 测试通过。我用mediaplay 不知道怎么播放网络mp4视频,难道下载下来播放嘛?今天群里有人说mediaplay 安卓下播放网络视频报错。注意事项:看我的另一篇博客。 阅读详情

相关推荐

Delphi视频播放器-无需控件 源码直译.rar

Delphi视频播放器-无需控件 源码直译,支持播放下列文件格式:CD/VCD/VCR,三维动画、立体电影、数字视频等格式,附带有简单的视频控制功能,界面也是相当的简洁,对于编写多媒体系统来说,极具参考性。

delphi xe firemonkey 调用VLC播放器播放视频

var wc:twincontrol; w:TWinWindowHandle;begin player:=TPasLibVlcPlayer.Create(self); w:=windowhandletoplatform(handle); wc:=twincontrol.CreateParented(w.Wnd); wc.Width:=500; wc.Height:=100; ...

diaowojian9497的博客 614

MP4播放器(delphi开发的)

基于delphi开发的MP4播放器,希望对大家有帮助!

Delphi MediaPlayer Android 的问题

Delphi 10.2 FireMonkey 下,TMediaPlayer 目前支持 Windows, iOS, Android 好像还支持 MAC OS。在 iOS 底下表现正常。在 Android 下面,界面上放一个 Button,在 OnClick 里面执行以下代码:MediaPlayer1.FileName := 'MyVideo.mp4';MediaPlayer1.Play;点击按钮,执...

pcplayer的博客 2703

Delphi播放器

效果图见博客地址:http://blog.youkuaiyun.com/zyjying520/article/details/8310007

mp4Player.zip_android_delphi MP4播放器_delphi mp4信息_delphi 播放MP4_mp

delphi 10.1开发的MP4播放器,比较简单,仅供参考

MediaPlayer Android 下播放 MP4 的问题

开发环境:Delphi 10.3.1 社区版。 测试环境: A. Android 5.0; B. Android 9.0 1. 进度条 Delphi 官方带的例子里面,关于进度条的代码: procedure TForm1.Timer1Timer(Sender: TObject); begin if ProgressBar1.Max <> MediaPlayer1...

pcplayer的博客 3414

从零构建高精度电子秤:HX711与STM32的时序通信陷阱与实战避坑指南

本文详细解析了使用STM32F103C8T6与HX711模块构建高精度电子秤的通信时序陷阱与实战解决方案。重点探讨了微秒级延迟实现、数据读取算法、校准方法和滤波优化,帮助开发者避开常见通信问题,提升电子秤的测量精度和稳定性。

data3的博客 781

Delphi FMX安卓Android播放mp3音频内存流

Delphi FMX跨平台的MediaPlayer无法播放音频数据流只能打开音频文件播放,但有时候需要直接播放内存流数据而无需生成文件,可以通过把内存流转ByteArray再通过Android平台系统原生的MediaDataSource或ParcelFileDescriptor 加载播放流音频数据;用java编译打包添加到库即可。【笔记:安卓开发Java+Delphi FMX】

630

玉米群体遗传分析实战:如何用IQtree和VCF文件快速构建系统发育树(附避坑指南)

本文详细介绍了如何利用IQtree和VCF文件进行玉米群体遗传分析,并快速构建可靠的系统发育树。文章重点解析了从VCF格式转换到PHYLIP格式的实用技巧,强调了使用ASC模型校正SNP数据偏差的重要性,并提供了完整的参数设置、常见报错解决方案及结果评估指南,帮助研究者高效完成分析并规避常见陷阱。

leaf8的博客 606

AutoDL跑yolo

由于博主在AutoDL的JupyterLab的终端直接上传ZIp文件要么老是再上传中被中断,要么就是上传后使用unzip指令解压显示“找不到”,作为纯小白的我实在太难了!这个文件列出了一个 Python 项目所需的所有依赖包及其精确的版本号。这个文件是 Python 项目中常见的一种方式,用于确保项目在不同环境中都能以相同的依赖包配置运行。3.进入JupyterLab,在文件夹目录中找到上传的文件夹,右键点击“复制路径”。然后在终端中输入以下指令进行切换到该文件夹路径。9.安装成功后开始输入指令开跑!

m0_73804659的博客 1203

Android微信机器人集成音乐播放:MediaPlayer音频焦点与后台服务实践

在Android应用开发中,音频播放是多媒体功能的核心场景之一,涉及音频焦点管理、后台服务保活等关键技术。其原理在于通过系统音频服务协调多个应用间的音频输出,避免同时播放产生冲突。技术价值在于保障用户体验的连贯性与系统资源的合理分配,广泛应用于音乐播放器、语音助手等场景。本文以微信机器人ClawBot为例,详细解析如何基于MediaPlayer实现稳定的后台音乐播放,重点解决音频焦点协商与Service生命周期管理问题,为自动化工具集成语音输出功能提供完整方案。

weixin_30542079的博客 420

机器人的“大脑”进化论:从专用控制器到高性能SoC的异构计算时代

摘要:随着AI与机器人技术融合,高性能芯片成为机器人智能化的关键。本文分析了机器人对芯片的核心需求,包括多模态数据处理、实时控制和智能决策能力。系统级芯片(SoC)因集成CPU、GPU/NPU等模块而成为主流选择。市场呈现分层格局:中低端设备(如扫地机器人)采用"MCU+轻量SoC"方案,满足基础功能;高端机器人则依赖"高性能SoC+独立GPU"处理复杂任务。除主控芯片外,完整的机器人系统还需传感器接口、驱动、通信等配套芯片。未来,芯片技术的进步将持续推动机器人智能化

致力于lidar应用开发 82

MediaPlayer播放不了音频和播放的音频错误

问题:在系统里面播放两个音频文件,一个是在锁屏,一个是触摸屏幕就播放。 思路:mediaPlayer有两种方式播放音频文件, MediaPlayer player = new MediaPlayer(); MediaPlayer player = MediaPlayer.create(context,R.rawXXX); 安卓屏幕的触摸事件是在PhoneWindowManager.java 里...

m1126125223的博客 1526

Maestro 薛定谔软件简单分子对接案例

#参考:Maestro 薛定谔软件使用:Maestro 薛定谔对接:sid=287811。

weixin_42357472的博客 1万+

矿石生成(1)

这个提供了标准化的矿石放置配置模板简化了常见和稀有矿石的配置过程遵循了Minecraft原版的世界生成模式提高了代码的可读性和可维护性通过使用这个类,模组开发者可以更轻松地配置矿石的生成规则,而不需要每次都手动编写完整的放置修饰符列表。这种设计模式在原版Minecraft和其他大型模组中也很常见,是一种良好的编程实践。// 导入语句...// 字段和方法...包声明表明这个类位于luckymod模组的WorldGen包中,专门处理世界生成相关配置。导入语句。

qq_24992377的博客 136

MediaPlayer与SoundPool小结

写小结的目的有两个: 其一,可以加深对所学的内容的理解与提高; 其二,分享一下我的心得,同时希望大家踊跃指正,共同学习。       经过这段时间的软件开发,对MediaPlayer与SoundPool的使用以及在开发过程中出现的问题做一下小结: 由于开始对android的音频控制类陌生,所有在网上搜了部分资料进行了学习,由于网上的资料有点零散,零零碎碎的找到了可以设置android音频的类M

j67065的专栏 4121

MinerU 本地部署完整指南:从零构建你的私有文档智能处理系统

摘要: MinerU是一款开源本地化文档解析工具,可将PDF、Word等文件智能转换为结构化Markdown,保留表格、公式、图片等元素。其核心优势包括: 隐私安全:完全离线处理,避免云端数据泄露风险; 高精度解析:基于深度学习还原文档逻辑结构,支持多格式输入; 易集成:提供RESTful API,适合金融、医疗等敏感场景。部署需Python 3.9+环境,支持CPU/GPU运行,推荐配置16GB内存及NVIDIA显卡。通过命令行或Docker即可快速启动,适用于知识库构建、RAG系统预处理等。

reset2021的博客 750

Delphi 10 fmx中录制音频

使用TCaptureDeviceManager类的DefaultAudioCaptureDevice方法获得TAudioCaptureDevice对象。FMX.Media.TAudioCaptureDevice进行录制使用类进行。Memo1.Lines.Add('无法使用语音捕获设备。Memo1.Lines.Add('开始录音了。Memo1.Lines.Add('录音结束。Memo1.Lines.Add('开始播放。在项目选项中选择“使用权限”,然后选中“录制音频”。安卓苹果手机测试通过。

全粘工程师 506

第六天 界面操作及美化(6.4 使用GUI 套件)

本文介绍如何使用VIPM工具安装DMC GUI套件:首先打开VIPM并连接网络,搜索"UI"找到DMCGUI套件后下载安装;安装完成后即可在VIPM中添加控件并预览效果。该方法同样适用于下载其他UI套件,用户可根据需求设计个性化界面。整个流程包括搜索、下载、安装和使用四个简单步骤,适合快速搭建GUI界面。

weixin_38637405的博客 407

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

MediaPlayer和AudioTrack播放Audio的区别与联系

播放声音可以用MediaPlayer和AudioTrack,两者都提供了java API供应用开发者使用。虽然都可以播放声音,但两者还是有很大的区别的。 其中最大的区别是MediaPlayer可以播放多种格式的声音文件,例如MP3,AAC,WAV,OGG,MIDI等。MediaPlayer会在framework层创建对应的音频解码器。 而AudioTrack只能播放已经解码的PCM流,如果是文

u011361576的专栏 699

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Delphi 12 安卓 部署文件,不支持中文文件名

sFileName:=TPath.Combine(TPath.GetDocumentsPath,'禁止吸烟.wav');

497

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

利用MediaPlayer 获取一个音频或者视频文件的播放时长

MediaPlayer md = new MediaPlayer();         try {             LogUtils.log(Environment.getExternalStorageDirectory() +"/123.mp3");             md.setDataSource(Environment.getExternalStorageDirecto

Deep Lee的专栏 1万+

关于MediaPlayer的同步和异步

在加载作业资源过程中,因为作业中有视频资源,出现了请求加载资源接口后,页面持续很久才会跳转(但是,Fragment已经走到了onResume()生命周期) ,最初将问题定位在视频较大,需加载很久。而log一直在报MediaPlayer.prepare();的错误,我认为视频长度能正常获取,这部分代码就是没问题的,就没有管。 但是又想不管是视频还是图片,请求到的数据都是一个url,不会占用很多时...

weixin_43876181的博客 1213

MediaPlayer主要属性

主要涉及类:MediaPlayer (1) 当一个MediaPlayer对象被创建或者调用reset()方法之后,它处于空闲状态,调用release()方法后处于结束状态 1,一个MediaPlayer对象调用了reset()方法后,再调用其它方法可能会触发OnErrorListener.onError()事件,未调用reset()方法则不会触发 2,当Mediaplayer对象不再被使用时,最好

梁少腾的博客 1462

Android实例-MediaPlayer播放音乐和视频(XE8+小米2)

  结果: 1.播放视频需要手动放入MediaPlayerControl1控件,设置MediaPlayerControl1.MediaPlayer := MediaPlayer1; 2.播放声音文件正常,但播放器视时发现,第一边正常第二边就报错了(哪位大神知道的,请M我哦,先谢谢了)。 3.打包时需要打入MP3与MP4文件,路径为"assets\internal\"。 PS:2016...

weixin_33859844的博客 283
上一篇: Delphi MediaPlayer Android 的问题
下一篇: 关于 AR/VR 的黑科技,Magic leap 以及显示技术的革命(无关Delphi编程)
pcplayer
博客等级 码龄26年 633粉丝 284原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值