MPMoviePlayerController 與 MPMoviePlayerViewCo

AndroidX Media3之ExoPlayer简单使用(2) 在上一篇文章中介绍了ExoPlayer的简单使用,运用了media3-ui包中提供的关于ExoPlayer的UI组件和资源。但是在日常开发中,播放器的界面会被要求为各式各样的,没有办法使用media3-ui包中提供的通用界面。在这篇文章将介绍如何自己实现一个简单的PlayerView。 阅读详情

from:@"http://zonble.net/archives/2010_07/1337.php"

ADC 這兩天寄信通告開發者,隨著 iOS 4.0 已經正式上市,接下來如果要在 AppStore 上推出新軟體、或是更新版本,都一定要用 4.0 SDK 編譯。雖然是用 4.0 SDK,我們還是可以透過修改 Deployment Target 的方式,讓編譯出來的軟體也可以在使用 4.0 之前版本作業系統的裝置使用,不是什麼大問題。

不過,如果你的軟體裡頭需要播放影片,使用了系統提供的影片播放元件,就必須注意-MPMoviePlayerController 的宣告與實作變了。

 

從 2.0 版開始,iPhone 便提供 MPMoviePlayerController 這個 class,讓開發者在軟體中播放 H.264 影片。在呼叫了 alloc、initWithContentURL: 產生物件並指定要播放的影片的 URL 之後,就會直接產生、升起一個全螢幕的橫向播放畫面,蓋住你原本的程式畫面,載入、播放影片內容。或這麼說- MPMoviePlayerController 會幫你產生一個 UIWindow 物件,蓋在原本應用程式所在的主 window 上,其他還會產生 UIWindow 則包括文字輸入鍵盤…等。

雖然這個元件在設計上也有些問題-像之前提過,明明在 class 的 interface 中,就只容許一次指定一個影片的 URL,而不是提供一張可以讓你選取前後不同影片的播放列表,但居然畫面上會有向前與向後的按鈕,點下去之後會直接關閉影片,又不會驅動任何事件,不過,在這裡暫且不表。

如果直接把透過 3.1.3 之前 SDK 開發的影片程式碼,丟進最新的 SDK 編譯、執行,會遇到問題-可以聽到影片的聲音,但是看不到畫面。在 3.2 之後,MPMoviePlayerController 多了一個屬性叫做 view,想要看到影片的畫面,得要在目前畫面的某個 view 中,把 MPMoviePlayerController 的 view 透過 addSubview: 加上去。如果沒把這個 view 放上去,就不會看到畫面。

之所以會這樣修改的原因,在於 iPad 的推出。iPad 的 SDK 與開發工具雖然與 iPhone 完全相同,但是螢幕尺寸不同,使用者介面的設計也就自然不同。在 iPhone 螢幕上統一使用全螢幕播放影片,這沒問題,但是 iPad 上全都是全螢幕就說不過去,因此,將影片的畫面顯示部分拆出來,變成 view,就可以自行決定影片的尺寸以及擺放位置。iOS 4.0 中,繼續沿用從 3.2 起針對 iPad 所做的設計。

在接下來的日子裡,相信在使用影片播放時,會不斷過渡到新的 API 上,不過,在 iOS 4.0 剛推出、3.x 還是一堆人在用的時候,在做應用程式的時候,難免還是要做成雖然用 4.0 SDK 編,但是可以在 3.x 上執行的的版本。(更何況,還是會有人會把你的程式裝在 iPad 上,用 4.0 SDK 編譯的東西,至少也要向下相容到 3.2。)

我現在的作法是,在播放影片之前,先檢查一下目前的作業系統版本,如果是 3.2 之前,就產生 MPMoviePlayerController 物件,呼叫 play,反之,就產生 MPMoviePlayerViewController 物件。

MPMoviePlayerViewController 是 3.2 開始的 API,大抵上用途就與 3,2 之前的 MPMoviePlayerController 行為一樣,就是一個全螢幕的播放畫面,反正在 iPhone 上,就算是 3.x 或 4.0,都是用全螢幕播放影片。在產生這個物件之後,UIViewController 可以用 presentMoviePlayerViewControllerAnimated: 這個 method,升起影片播放畫面,比較不一樣的地方是,3.x 的 MPMoviePlayerController 只能夠橫向播放,MPMoviePlayerViewController 則在水平或垂直方向都可以播放影片。而要檢查目前裝置是否支援新的 API,也只要隨便問一個 UIViewController 支不支援 presentMoviePlayerViewControllerAnimated: 就好了。

順道一提,iPad 上面的影片播放元件,又有另外一個討厭的問題-在影片上面,有一個控制進入/退出全螢幕模式的按鈕,你沒辦法讓這個按鈕消失,不讓使用者只能在全螢幕或非全螢幕模式下使用,於是接著產生以下問題:

如果你產生了一個 MPMoviePlayerViewController,直接進入全螢幕播放,那麼,當使用者按下退出全螢幕按鈕,系統會不知道要把影片畫面回復到哪個 view 中,就會直接退出影片。

而且,MPMoviePlayerController 的 view,如果放在某個 modal view 裡頭,然後進入全螢幕模式,你會發現,modal view 的 level 比全螢幕播放畫面高,所以 modal view 會蓋在影片上頭,你的影片正中央有個空蕩蕩的 modal view,而因為 Touch 事件也都被 modal view 攔住,所以使用者再也點不到影片上面的各個操控按鈕。請參閱 rdar://8012810。

Exoplayer的详细使用UI篇 1. ExoPlayer中的UI主要分 主视频播放控件PlayerView 、StyledPlayerView 控制控件PlayerControlView 主视频覆盖view,exo_overlay 其他还有包括字幕,插图等控件 2. 使用方式 控件PlayerView与PlayerControlView都提供的是布局layout id设置方式来让用户自定义界面。 在控件中解析layout id中特定id的控件来达到用户自定义布局中的控件与视频播放ExoPlayer关联 <com.google.a 阅读详情

相关推荐

精通Android平台的音频视频播放技术

本文还有配套的精品资源,点击获取 简介:在Android应用开发中,音频和视频播放是常见需求,本主题深入探讨了如何使用Android系统的API和工具实现丰富的音频视频播放功能。重点介绍了 MediaPlayer 和 ExoPlayer 两个核心组件的使用步骤和操作细节,包括设置数据源、播放控制以及资源释放。此外,还讲解了如何处理媒体文件的其他操...

weixin_42143092的博客 1595

ExoPlayer简单使用

ExoPlayer Library 概述 ExoPlayer是运行在YouTube app Android版本上的视频播放器 ExoPlayer是构建在Android低水平媒体API之上的一个应用层媒体播放器。和Android内置的媒体播放器相比,ExoPlayer有许多优点。ExoPlayer支持内置的媒体播放器支持的所有格式外加自适应格式DASH和SmoothStreaming。Exo...

csdn_zxw的博客 3028

PlayerControlView:该库提供了可轻松自定义的Android MediaController

PlayerControlView 该库提供了可轻松自定义的Android 。 基本用户界面 自定义UI 特征 按钮图片可自定义 文字颜色和大小可定制 快进/快退时间可自定义 显示持续时间是可定制的 如果需要,此视图可以保留 支持的播放器 媒体播放器 VideoView ExoPlayer1.x 和Android TV(专注于图像) 不支持ExoPlayer2.x,请根据需要使用 。 安装 将其添加到您的应用模块构建包中。 dependencies { compile ' com.github.ogapants:PlayerControlView:1.0.1 ' } 基本用法 PlayerControlView使用接口作为播放器。 PlayerControlView playerControlView = new PlayerControlView ( this )

自定义MediaPlayer控制组件

一款自定义的MediaControl组件,替换Android系统自带的控制组件,控制视频播放、快进、暂停等功能Android系统自带的MediaControl组件过于难看,自己写个替换,使用简单,顺便也可以学到东西,源码在https://github.com/JackZhous/JMediaControl效果图使用方法 实现自定义组件必须的接口ControlOper,接口内部逻辑自己实现,该接口功能

jackzhouyu的专栏 1015

深入解析DisplayPort(DP)接口:从主链路到辅助通道的全方位技术剖析

本文深入解析DisplayPort(DP)接口的核心技术架构,重点剖析了其三大功能模块:承载视频/音频数据洪流的Main-Link主链路、负责链路训练与设备控制的AUX CH辅助通道,以及实现智能交互的HPD热插拔检测。文章详细阐述了主链路的可伸缩Lane配置、嵌入式时钟与数据成帧机制,以及辅助通道在设备发现、动态优化信号质量(链路训练)中的关键作用,揭示了DP接口实现高效率与灵活性的设计哲学。

weixin_29267307的博客 485

怎么用phpstudy制作网站

随着实践的深入,你会逐渐掌握更多高级技巧和技术,让你的网站变得更加完善和吸引人。现在你已经成功设置了你的本地Web服务器环境,接下来我们将指导你如何利用这个环境来创建一个简单的PHP网页项目。为了使网站更加动态且功能丰富,我们需要学会如何让PHP脚本与MySQL数据库交互。为了让网站看起来更专业美观,可以考虑引入CSS样式表来定制网页布局及视觉效果。当你对本地开发的网站感到满意后,下一步就是将其发布到互联网上供他人访问了。让我们进一步扩展我们的网站,加入一个简单的用户注册与登录系统。

2401_87999399的博客 6573

ExoPlayer详解(官方文档-入门)

ExoPlayer详解系列文章-入门 一、前言 ExoPlayer是google开源的应用级媒体播放器项目,目前已有1W+的start,并一直在维护。该开源项目包含ExoPlayer库和演示 demo,github地址:https://github.com/google/ExoPlayer。和官方文档https://exoplayer.dev/hello-world.html 二、优缺点比较 与Android内置的MediaPlayer相比,ExoPlayer具有许多优点: *支持通过HTTP(D.

qq_35864421的博客 4万+

使用Anaconda和conda快速搭建YOLO开发环境

本文详细介绍了如何使用Anaconda和conda为YOLO目标检测项目快速搭建独立、纯净的开发环境。通过创建虚拟环境,有效解决了Python包版本冲突和CUDA兼容性问题,并指导安装GPU版PyTorch等核心依赖,最后通过验证脚本确保环境配置成功,为YOLO开发提供了稳定可靠的基础。

weixin_28829629的博客 161

使用exoplayer2的PlayerControlView时,出现几秒后自动消失的解决方案

【代码】使用exoplayer2的PlayerControlView时,出现几秒后自动消失的解决方案。

weixin_41023791的博客 223

等离子体密度诊断集

在实验上不仅要对带电粒子的分布和运动状态进行诊断,如电子温度、电子密度、电离温度等参数,还需要对等离子体中的中性粒子进行必要的实验测量,来获得有关物种的产生、能量分布以及各个激发态布居数分布等信息,如气体温度、转动温度、振动温度、激发温度等参数。

in546的博客 1351

ArcGIS:景观指数和景观单元关联生成景观指数遥感图像

优快云@_养乐多_本文将记录,使用由 Fragstats V4.2 软件计算的景观指数和瓦片 tif 数据生成景观指数图像的操作步骤。本教程的操作均在ArcGIS上进行,最后生成一个研究区内指定景观单元大小的景观指数图像。结果如下所示,

养乐多的博客 4926

JetPack知识点实战系列十:ExoPlayer进行视频播放的实现

本节教程我们将来介绍下ExoPlayer的视频播放功能。 我们在本节将主要介绍以下知识点: ExoPlayer高级自定义的实现 视频的全屏播放和退出全屏播放 ExoPlayer在RecyclerView中的复用 ExoPlayer介绍 MediaPlayer和ExoPlayer是Google官方支持的两种播放器,但是ExoPlayer比MediaPlayer多了支持基于 HTTP 的动态自适应流 (DASH)、SmoothStreaming 和通用加密等功能。 并且重要的是它独立于Android代码框

lcl130的专栏 3273

uniapp(全端兼容) - 最新详细实现接入腾讯视频播放器功能插件,uniapp全平台端(小程序/H5网页/App/nvu)调用引入并使用腾讯视频播放组件完整全流程(详细示例源码,一键复制开箱即用)

uniapp腾讯视频,uniapp微信小程序腾讯视频,uniapp小程序接入腾讯视频详细示例教程源码,uniapp怎么在微信小程序平台使用腾讯视频插件,在uni-app中使用腾讯视频插件播放视频,uniapp调用腾讯视频,uniapp引入腾讯视频插件,uniapp小程序中引入腾讯视频无法播放,uniapp微信小程序平台引入腾讯视频播放不了黑屏,在uniapp开发的微信小程序中使用腾讯视频,uniapp如何引入腾讯视频插件播放视频,uni-app小程序平台引入腾讯视频插件播放腾讯视频,uniapp 小程序接入

✅ 精选推荐文章 1万+

ExoPlayer之PlayerView源码分析

项目从MediaPlayer迁移到ExoPlayer也有一段时间了.之前看过VideoView的源码,就是对MediaPlayer的一层封装.网上对该类的分析太多了,所以不多赘述了. 当前ExoPlayer已经更新到2.8.1,在此之前,简单播放视频使用SimpleExoPlayerView, 类似于内置的VideoView.不过当前该类已经废弃,改为PlayerView.所以我们基于ExoPl...

Caben_的博客 4798

VHDL六层电梯控制器及仿真

六层电梯电梯 设计要求:设计一个六层电梯控制系统要求有超载、关门中断、提前关门清除报警信电梯外人的上升请求信号,电梯外人的下降请求信号, 电梯外人上升请求信号显示电梯外人下降请求信号显示到达楼层信号 设计思路:输入有clk时钟信号(频率为2Hz) full,deng,quick,clr超载、关门中断、提前关门清除报警c_u1,c_u2,c_u3,c_u4,c_u5电梯外人的上升请求c_d2,c_d3,c_d4,c_d5,c_d6 电梯外人的下降请求 d1,d2,d3,d4,d5,d6电梯内人的...

QQ_778132974的博客 1706

华为OD机试真题 新系统2026-04-01 Java&Go【计算数列位置N的值】

如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;1、输入M、N两个数,则按照以下规则形成一个数列;两个整数,用逗号分割,分别表示M和N。一个整数,表示数列第N个位置上的数值。2、数列的前M个元素的值为1到M;请计算该数列第N个位置上的数值。N取值范围:1<= N<=50。M取值范围:3<=M<=10。

MISAYAONE的博客 2030

ExoPlayer修改播放器UI

exoplayer修改播放器

wangadping的博客 1238

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MediaPlayer+TextureView实现视频播放功能

3、初始化TextureView,并设置监听,需求需要给给TextureView加一个圆角,角度是16。2、初始化视频资源,这里把需要播放的视频集成在应用中,位置放在res/raw下。前面写一些基础知识的学习,这篇写个小demo,实现视频循环播放功能。这个demo只是简单实现,具体播放最好放子线程进行。4、初始化MediaPalyer播放器。

孔小乐的博客 1330

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android--media3--PlayerView隐藏控制按钮

关键代码:具体示范:打开以后没有出现控制按钮等。

748

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

TEASER-plusplus异常值处理秘籍:如何让你的配准算法更稳健

TEASER-plusplus是一款快速且稳健的点云配准库(A fast and robust point cloud registration library),专为解决存在大量异常值情况下的点云配准问题而设计。在实际应用中,点云数据往往受到噪声、遮挡和错误匹配的影响,这些异常值会严重降低配准精度。本文将深入解析TEASER-plusplus的异常值处理机制,帮助你掌握让配准算法更稳健的核心技巧

gitblog_00238的博客 479

史上最好用的Android音视频播放器-ExoPlayer的使用及自定义UI

ExoPlayer是运行在YouTube app Android版本上的视频播放器。不仅功能强大,而且使用简单,可定制性强。ExoPlayer也是Google官方推荐的Android媒体播放器,可以在Android官方文档的音频和视频目录中找到。 一,优点和缺点 优点: 1,支持DASH和SmoothStreaming这两种数据格式的资源,而Media......

BigBoySunshine的专栏 5万+

ExoPlayer详解——入门(官方文档)

ExoPlayer详解系列文章 ExoPlayer详解——入门(官方文档) ExoPlayer详解——媒体类型(官方文档) ExoPlayer详解——高级主题(官方文档) 一、ExoPlayer,你好 简单用例 入门ExoPlayer包括实现以下步骤: 将 ExoPlayer 添加为项目的依赖项。 创建一个 SimpleExoPlayer 实例。 将播放器连接到视图(用于视频输出和用户输入)。 ...

csdn_zxw的博客 1万+

国行iPhone的AI能力落地了,但还不是AI手机

其一,iPhone 15标准版及更早机型的用户不在覆盖范围内,换机是使用的前提,不是可选项。同一来源的评论文章把逻辑说得更直接:合规是硬门槛,境外模型没法直接落地中国,苹果只能找本土备案的模型方,而阿里正是绑定的模型提供方(E39)。决定“够不够”的,是缺席的那部分。Siri是iPhone上唯一贯穿系统、以语音为入口的助手层,它没有升级,意味着用户与设备之间的交互方式没有改变,改变的是若干具体任务的处理效率。它是国行iPhone AI能力的一条及格线,落地的是一套可用的工具,而不是一次设备形态的换代。

全世界的博客 270

【行业动态】千问入局,苹果补位:国产大模型首次进入 iPhone 系统级 AI

其中,千问在图文理解、文档问答与写作辅助方面的能力,将成为多项功能的直接底层支撑——用户可以用自然语言与系统交互,让 Siri 借助千问理解复杂指令,让写作工具基于千问生成或润色内容,让视觉智能识别并理解照片中的信息。此次与阿里巴巴的合作,正是苹果对这一缺口的正面回应。值得注意的是,这版功能列表并未包含 WWDC 2026 所预告的全部新一代 Siri AI 能力,说明苹果采取的是“分批上线、小步快跑”的本地化策略:先以确定性强、风险可控的功能打好基础,再逐步放开更深度、更智能化的体验。

轨物科技的博客 270
上一篇: iPhone的九宫格实现代码
下一篇: Core Telephony
iphoneing
博客等级 码龄16年 12粉丝 45原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值