Android媒体应用(五)--构建视频应用程序

Android 的媒体路由功能应用与框架解析 功能描述      Android 的媒体路由API被设计用来允许多种媒体( 视频、音乐、图片)在与ANDROID设备连接( 无线或有线)的辅助设备(如电视、立体声、家庭戏院系统、音乐播放机)上显示和播放, 使用该框架和API,允许 Android用户立即在辅助设备上显示图片、播放音乐、共享视频等。 媒体路由框架提供两种播放输出类型:远端播放和辅助输 阅读详情

原文地址:https://developer.android.google.cn/guide/topics/media-apps/video-app/building-a-video-app.html

典型的视频播放器在运行时总是显示其控件和视频内容; 它不能在后台运行或没有UI。 因此,将您的应用程序构建为包含用户界面,播放器,媒体会话和媒体控制器的单个Activity是适当的:

建立一个视频播放器Activity

如何创建包含媒体会话和媒体控制器的Activity。

当Activity接收到onCreate()生命周期回调方法时,它应该执行这些步骤:

  • 创建并初始化媒体会话
  • 设置媒体会话回调
  • 将媒体会话的媒体按钮接收器设置为空,以便媒体按钮事件在不可见时不会重新启动播放器。 这仅影响Android 5.0(API级别21)和更高级的设备。
  • 创建并初始化媒体控制器

下面的onCreate()代码演示了这些步骤:

MediaSessionCompat mMediaSession;
PlaybackStateCompat.Builder mStateBuilder;

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  // Create a MediaSessionCompat
  mMediaSession = new MediaSessionCompat(this, LOG_TAG);

  // Enable callbacks from MediaButtons and TransportControls
  mMediaSession.setFlags(
    MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
    MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);

  // Do not let MediaButtons restart the player when the app is not visible
  mMediaSession.setMediaButtonReceiver(null);

  // Set an initial PlaybackState with ACTION_PLAY, so media buttons can start the player
  mStateBuilder = new PlaybackStateCompat.Builder()
                .setActions(
                    PlaybackStateCompat.ACTION_PLAY |
                    PlaybackStateCompat.ACTION_PLAY_PAUSE);
  mMediaSession.setState(mStateBuilder.build());

  // MySessionCallback has methods that handle callbacks from a media controller
  mMediaSession.setCallback(new MySessionCallback());

  // Create a MediaControllerCompat
  MediaControllerCompat mediaController =
    new MediaControllerCompat(this, mMediaSession);

  MediaControllerCompat.setMediaController(this, mediaController);
}

当应用程序关闭时,Activity会连续收到onPause()和onStop()回调。 如果播放器正在播放,则必须在Activity消失之前将其停止。 选择使用哪个回调取决于您正在运行的Android版本。

在Android 6.0(API级别23)及更早版本中,不能保证何时调用onStop()。 你的Activity消失后可能会被调用5秒。 因此,在7.0之前的Android版本中,您的应用应该在onPause()停止播放。 在Android 7.0及更高版本中,只要Activity不可见,系统就会调用onStop(),所以这不成问题。
总结:

  • 在Android 6.0及更早版本中,在onPause()回调中停止播放器。
  • 在Android版本7.0和更高版本中,停止播放器的onStop()回调。当活动收到onDestroy()回调时,它应该释放并清理你的播放器。

MediaSession回调

介绍媒体会话回调方法如何管理媒体会话和其他应用程序组件,如通知和广播接收器。
由于视频应用在相同的Activity中运行其媒体会话和媒体控制器,因此媒体会话回调与音频应用服务器/客户端体系结构所示的实现不同。 没有服务调用,通知通过NotificationManager处理。 下表显示了如何在每个回调方法中控制各种功能:


onPlay()
onPause() onStop()
Audio Focus requestFocus() passing in your OnAudioFocusChangeListener.
Always call requestFocus() first, proceed only if focus is granted.
  abandonAudioFocus()
Media Session setActive(true) 
- Update metadata and state
- Update metadata and state setActive(false)

- Update metadata and state

Player Implementation Start the player Pause the player Stop the player
Becoming Noisy Register your BroadcastReceiver Unregister your BroadcastReceiver  
Notifications Show notification Update notification
注意:如果您使用必要的回叫功能创建MediaSession,那么使用Google智能助理的用户可以使用语音命令来控制您的应用。 这些要求在Google智能助理文档中进行了解释。

FFmpeg安卓流媒体播放器开发实战视频课程 -基于NDK、C++和 FFmpeg Android 课程目标 https://edu.csdn.net/combo/detail/986---Android 音视频开发(杨万里付费版) 学会编译安卓平台的ffmpeg库(支持硬解码和neon),学会ffmpeg的解码解封装接口,学会opensles播放音频,学会opengles、egl、shader、glsl播放yuv视频,学会音视频同步策略,学会将设计模式应用到实际项目中。 适用人群 ... 阅读详情

相关推荐

构建精确音视频同步的Android应用程序:Aeneas项目实践

Android是一个基于Linux内核的开源操作系统,专为移动设备设计。在应用开发领域,Android应用程序通常使用Java或Kotlin语言编写,它们通过Android SDK提供的API与系统进行交互。从初学者到资深开发者,理解Android应用的基本结构和工作原理是进行有效开发的基础。Android软件开发工具包(SDK)提供了丰富的API供开发者使用。这些API允许开发者访问和操作Android系统资源和功能,如用户界面构建、音频播放、视频录制和网络通信等。

weixin_30248619的博客 745

Android MediaController&MediaSession

媒体服务,它有两个关键的回调函数,onGetRoot(控制客户端媒体浏览器的连接请求,返回值中决定是否允许连接),onLoadChildren(媒体浏览器向服务器发送数据订阅请求时会被调用,一般在这里执行异步获取数据的操作,然后在将数据发送回媒体浏览器注册的接口中)。MediaSession框架是google在android5之后引入的一个音乐播放框架,用来解决音乐界面和服务之间的通信问题,它的主要作用是规范了媒体服务和界面的通信接口,达到了完全解耦,可以自由、高效进行不同的媒体的切换。

liuning1985622的博客 4440

安卓视频播放与流媒体处理实战教程

通过上述方法和技术,开发者可以高效地从视频文件中提取缩略图,并根据实际应用场景灵活选择合适的缩略图。在接下来的章节中,我们将深入探索视频播放器库的应用与控制,以及如何进一步优化视频流处理和内容共享。JieCao 播放器提供了默认的播放器界面,但在实际应用中,开发者可能需要根据应用的设计风格对播放器界面进行自定义。初始化播放器时,需要配置其界面以及一些播放选项。// 设置视频控制器,可自定义UI// 设置是否循环播放// 设置是否全屏锁// 自动进入全屏模式在上述代码中,

weixin_29097457的博客 1148

Android后台监听耳机(线控、蓝牙)按键事件

在Activity中重写onKeyDown、onKeyUp这些 方法只适用于APP在前台的情况,如果将APP切换到后台就失效了。 经过网上一番摸索、读源码,终于把这个功能整出来了,说一下我的实现过程。 1.后台要获取到事件第一事件想到的肯定是广播,于是就找到了“android.intent.action.MEDIA_BUTTON”这个广播 2.注册监听这个广播后发现…这个广播压根接收不到啊,网上找了半天,有很多叫添加优先级(priority)的,可根本没用。。。 3.但功夫不负有心人,找到一篇10年前的文章

zhouyu的博客 7104

构建Android平台的视频呼叫应用

在实时音视频通信中,有几种常用的信令协议,每种都有其特定的用途和特点。:SIP是一个应用层控制协议,用于创建、修改和终止多媒体会话。它常用于VoIP(Voice over IP)和实时通信场景。SIP协议支持多种媒体类型,包括视频和即时消息。:RTSP主要用于控制流媒体服务器的播放、暂停、记录等操作,它通常不直接传输音视频数据,而是控制数据的传输过程。WebRTC。

weixin_33256096的博客 636

Android多媒体开发:第九章运行手机多媒体应用指南

本文还有配套的精品资源,点击获取 简介:本章节深入探讨了Android平台上多媒体应用开发的关键技术,包括使用Android SDK的API处理音频、视频和图像。介绍了多媒体框架、音频和视频处理、图像处理、媒体库和内容提供商、相机服务、文件读写及权限管理等方面的内容。详细阐述了MediaPlayer、ExoPlayer、AudioTrack、AudioRecord、Bitm...

weixin_29840475的博客 1376

线控 之 Android中MediaButtonReceiver广播监听器的机制分析

转载请注明出处:http://blog.csdn.net/qinjuning             在Android中并没有定义MediaButtonReceive这个广播类,MediaButtonReceive只是作为一种通俗的命名方式来响应    插入耳机后,点击耳机上的按钮(名称:MEDIA_BUTTON)接受该广播事件的类。所有该MEDIA_BUTTON的按下我们就简称

Norton的专栏 1317

Android多媒体编程全面指导手册

本文还有配套的精品资源,点击获取 简介:《Android多媒体编程从初学到精通》是一本详尽的技术指南,主要面向Android开发者。该书深入讲解了在Android平台进行多媒体编程的核心技术与实践应用,从基础的音频播放和处理,到高级的视频流媒体、图像处理、相机应用开发。书中不仅包括使用MediaPlayer类、VideoView、SurfaceView和Camera API...

weixin_30923011的博客 1112

android锁屏显示播放,android – 如何为媒体播放器制作锁屏通知

我试图在移动设备上获得锁定屏幕我能够让每件事情都像我的应用程序的通知和其他东西一样工作但是当我尝试显示锁定屏幕时它根本不适用于Android M.private void initMediaSession() throws RemoteException {if (mediaSessionManager != null) return; //mediaSessionManager existsCo...

weixin_39943202的博客 1076

android 媒体键监听 以及 媒体键模拟

Android 媒体键监听以及模拟媒体键盘的实现 ;

Ubuntu无桥接模式或连不上网(详细解决方法

目录 问题1:Ubuntu没有未桥接的主机网络适配器 解决方法 1.打开VMware安装目录下的文件 ​编辑2.右键安装以上三个文件 3.打开网络状态属性,找到VMware bridgeProtocol,点击安装 问题2.Ubuntu桥接模式连不上网 1.win+r打开cmd终端,输入ipconfig /all 2.记录以下数据 3.打开VMware网络设置 问题1:Ubuntu没有未桥接的主机网络适配器 VMWare安装之后,虚拟网络一直使用默认配置 VMnet0为...

m0_65592409的博客 6062

Android音视频多媒体开源框架基础大全

音视频的主要流程是录制、处理、编解码和播放显示。本文也遵循这个流程展开,多媒体框架有视频驱动框架V4L2/UVC,显示驱动框架DRM,音视频处理框架openMAX,播放框架EXoplayer,以及显示渲染框架VLC等。

samsion_的博客 2026

Polars简明基础教程一:Polars快速入门

在这个例子中,我们将添加一个列,其中包含每个舱位中乘客的最大年龄。在Python中(而不是特指Polars),当我们将代码包裹在括号中时,我们可以在新行上调用一个新方法——在这种情况下是select。在这里,我们看到一个使用表达式API的简单示例,其中我们在select语句中选择Pclass、Name和Age列(我们将在第3节中深入了解select语句)。表达式是一个函数,它接受一个Series(或DataFrame中的列)作为输入,并返回一个Series(或DataFrame中的列)。

sosogod的博客 3880

android应用程序框架

应用程序框架 Activity Manager:活动管理器。管理所有应用程序生命周期,以及通常的导航返回栈 Window Manager:窗口管理器。管理所有窗口程序 Content Provider:内容提供者。用来让程序之间互相存取、共享数据。例如,某个应用程序可以存取联系人应用程序内的联系人数据 View System:视图系统。用来构建应用程序的基本组件,包含了列表、网格、文本文档

guomeijuan916的专栏 2725

Qlib数据获取避坑指南:从CSV导入到自定义数据源的完整解决方案

本文详细解析了Qlib数据获取的完整解决方案,从CSV导入到自定义数据源,涵盖了股票数据处理的关键技巧和常见陷阱。特别针对Qlib平台的数据格式要求和复权处理提供了实用指南,帮助量化投资者高效整合Wind等第三方数据源,确保数据质量与模型性能。

weixin_29047919的博客 304

QMT vs Ptrade:量化交易新手如何根据需求选择券商系统(附实战案例)

本文对比了QMT和Ptrade两大券商量化交易系统的核心差异,帮助量化交易新手根据需求选择合适的平台。QMT适合技术面策略开发,执行效率高;Ptrade则提供全面的财务数据和复杂策略支持。通过实战案例,展示了如何结合两平台优势实现高效量化交易。

weixin_42683394的博客 527

Android音视频多媒体开源库基础大全

从事音视频开发工作,需要了解哪些常见的开源库,从应用到底软系统,整理了九大类,这里一次帮你总结完。

samsion_的博客 1419

【OpenCV-Python】——图像处理基础&读写及显示图像&读写及播放视频&灰度图/彩色图/图像通道操作、运算

在Python中,OpenCV使用NumPy数组存储图像,Numpy是使用Python进行数组计算的软件包,提供强大的N维数组对象,支持复杂的广播功能(数组运算),集成了C/C++和Fortran代码工具,支持线性代数、傅里叶变换和随机数等特性,还可作为通用数据的高效多维容器,如在OpenCV中显示图像。Numpy的知识点见数据处理专栏,主要包括数据类型、创建数组、数组形状、索引切片和迭代、数组运算等。作为初学者,里面可能有总结不全,后续深入学习后会改善文章!下次学习图形用户界面!

weixin_51658186的博客 2084

Android音视频流媒体基础总结

流媒体开发中,流媒体系统的实现从**数据采集、编码封装、传输分发、接收解码播放**都有哪些技术和实现,流媒体和本地音视频又有哪些差异?

samsion_的博客 1393

多模态大模型:技术原理与实战 全球多模态大模型介绍

关键词:多模态大模型、深度学习、计算机视觉、自然语言处理、跨模态学习、迁移学习、人工智能随着人工智能技术的飞速发展,多模态大模型已经成为了当前AI领域最热门的研究方向之一。多模态大模型能够同时处理和理解多种类型的数据,如文本、图像、音频和视频等,这为AI系统在复杂场景下的应用提供了更加强大和灵活的能力。本文将深入探讨多模态大模型的技术原理,介绍其实战应用,并对全球主要的多模态大模型进行全面的介绍和比较。

AI天才研究院 4268

PLC凸轮开关指令编程应用——控制算法

凸轮开关指令的作用是在PLC程序中根据凸轮开关(Cam Switch)的状态执行不同的操作。凸轮开关通常是机械式的开关装置,它的位置会随着机械运动的变化而改变。凸轮开关的状态可以用来检测机器的位置、角度或其他相关信息,从而触发相应的控制动作。总结起来,凸轮开关指令是PLC编程中常用的一种控制算法,通过检测凸轮开关的状态来触发相应的操作。本文将介绍凸轮开关指令的应用和相应的控制算法,并提供相关的源代码示例。在这个示例中,凸轮开关状态的值代表不同的位置,根据凸轮开关状态的不同,执行相应的动作。

LiJavascript的博客 1035

2020年20种最佳Android应用程序模板

使用应用模板可以使您更快地满足客户的截止日期,因为所有编程工作都已为您完成。 您需要做的就是根据客户的需求构建应用程序。 CodeCanyon上可用的许多Android应用程序模板之一 CodeCanyon上2020年最畅销的Android应用程序模板 要在2020年进行富有成效的应用程序开发旅程,请抓住这些流行的Android应用程序模板之一。 我们对CodeCanyon提供的数千...

代码教主 6163

Python爬虫实战:高效爬取CNKI知网文献数据的技术解析

本文将详细介绍如何使用Python最新技术构建一个高效的CNKI知网文献爬虫系统。我们将从爬虫基础知识讲起,逐步深入到高级反反爬技术、分布式爬取、智能解析等前沿内容。文章包含完整的代码实现,涵盖请求模拟、数据解析、持久化存储等关键环节,并特别针对CNKI的反爬机制提供解决方案。通过本文,读者将掌握构建专业级学术文献爬虫的全套技术栈。关键词:Python爬虫、CNKI爬取、反反爬技术、文献数据挖掘、Scrapy框架本文详细介绍了如何使用Python最新技术构建CNKI知网文献爬虫。

2201_76125261的博客 2075

安卓多媒体开发:音频与视频处理全解析

在移动应用开发中,多媒体功能(音频播放 / 录制、视频播放 / 拍摄)是提升用户体验的核心模块之一。无论是音乐播放器、语音备忘录,还是短视频应用、直播平台,都离不开对音频和视频的处理。Android 系统提供了丰富的 API 支持多媒体开发,从基础的播放功能到复杂的音视频编辑,开发者可以根据需求选择合适的方案。

2401_89387076的博客 957

efm32 入门.pdf

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

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android应用程序结构

一、Android应用程序的架构 Android软件层次结构自上而下可以分为: l         应用程序(Application) l         应用程序框架(Appliciation Framework) l         各种库(Libraries)和Android运行环境(RunTime) l         操作系统层(OS) 二、应用程序        Andr

黑暗之光 3345

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

14天学会安卓开发(第十三天)Android多媒体开发

14天学会安卓开发   作者:神秘的N (英文名  corder_raine) 联系方式:369428455(反馈) 交流群:284552167(示例,原文档下载) 版权为作者所有,如有转载请注明出处 目录        第十三天.Android多媒体开发... 126 13.1 播放音乐... 126 13.1.1 多媒体架构... 126

corder_raine的专栏 1563

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: Android媒体应用(四)--构建音频应用程序
下一篇: Android媒体应用(六)--响应媒体按钮
ITurbo
博客等级 码龄15年 17粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值