美文网首页
多媒体应用架构概览

多媒体应用架构概览

作者: 慎独静思 | 来源:发表于2023-03-04 22:58 被阅读0次

    对于音频类应用,我们一般采用客户端/服务端(C/S)设计,对于视频类应用,我们一般采用单activity设计。
    播放多媒体的应用一般分为两部分:播放器和界面

    多媒体应用
    Android中常用的播放器有MediaPlayer,ExoPlayer,IjkPlayer。
    Android框架定义了媒体会话媒体控制器两个类,为构建媒体播放器应用提供了一个完善的结构。
    媒体会话和媒体控制器
    媒体会话负责与播放器的所有通信,它会对应用的其他部分隐藏播放器的API,系统只能从控制播放器的媒体会话中调用播放器。会话会维护播放器状态的表示形式已经播放内容的相关信息。会话可以接受来自一个或多个媒体控制器的回调。响应回调的逻辑必须保持一致。
    媒体控制器会隔离您的界面,您的界面代码只与媒体控制器通信。媒体控制器会将传输控制操作转换为对媒体会话的回调。每当会话状态发生变化时,它也会接受来自媒体会话的回调。

    视频应用和音频应用有所不同,播放音频时我们可以同时和其他应用交互,播放视频时通常需要一个窗口,所以视频应用一般作为单个activity实现。


    视频activity

    音频播放器一般放在Service中实现


    音频架构
    为了实现C/S结构,支持库提供了两个类:MediaBrowserService和MediaBrowser,服务组件作为包含媒体会话及其播放器的MediaBrowserService子类实现,UI部分应该包含MediaBrowser与MediaBrowserService进行通信。

    媒体会话和媒体控制器建议使用media-compat 库中的MediaSessionCompat和MediaControllerCompat

    媒体会话新创建时必须通过以下步骤来初始化会话:

    1. 设置标记,以便媒体会话可以接受来自媒体控制器和媒体按钮的回调;
    2. 创建并初始化 PlaybackStateCompat的实例,并将其分配给会话;
    3. 创建 MediaSessionCompat.Callback的实例,并将其分配给会话;
      媒体会话应该在Activity或Service的onCreate中创建并初始化。

    播放状态和元数据表示媒体会话的状态。
    PlaybackStateCompat类用于描述播放器当前的运行状态,它包括:传输状态,错误代码和可选的错误信息,播放器位置,可在当前状态下处理的有效播放器操作。
    MediaMetadataCompat类说明正在播放的元数据,它包括:音乐人,专辑和曲目的名称,曲目时长,专辑封面等。
    播放状态和元数据在媒体会话整个生命周期会发生变化。通过调用setPlaybackState或setMetaData将新实例传递给媒体会话。要减少频繁操作带来的内存消耗,最好一次性创建构造器,并在整个会话生命周期内重复使用它们。

    参考:
    1.媒体应用架构概览

    1. 使用媒体会话

    相关文章

      网友评论

          本文标题:多媒体应用架构概览

          本文链接:https://www.haomeiwen.com/subject/oozyldtx.html