移动开发中的媒体与流媒体:概念、协议及工作原理

作者: IT Sectr 发布日期: 2026-05-20 阅读时间: 10 分钟

媒体与流媒体是现代移动开发的关键能力之一。根据Statista(2025年)的数据,全球视频流媒体市场到2027年将超过1000亿美元。移动设备占所有流媒体平台流量的60%以上。开发人员需要了解协议、播放器、内容保护机制以及画中画等功能。移动应用中的高质量流媒体需要掌握所有这些技术。

要点

  • 主要的流媒体协议——HLS(Apple)和DASH(MPEG)。HLS适用于iOS,DASH适用于Android和跨平台解决方案。
  • ExoPlayer(Android)和AVPlayer(iOS)是标准播放器。ExoPlayer更灵活,AVPlayer更容易集成。对于跨平台开发,有Google Cast SDK
  • DRM系统(Widevine、FairPlay、PlayReady)保护优质内容。Widevine是Android的标准,FairPlay是iOS的标准,PlayReady是Windows/Xbox的标准。
  • Audio Focus(Android)和Audio Session(iOS)管理通话和通知期间的音频播放。没有它们,用户体验将不完整。
  • 画中画和AirPlay是优质视频应用的必要功能。PiP允许在最小化应用时在小窗口中观看视频。

HLS和DASH协议

HTTP Live Streaming(HLS)是Apple开发的用于移动应用流媒体的协议。它将视频分割成小段(通常6-10秒),并通过普通HTTP传输。播放器下载播放列表(.m3u8)并顺序加载片段,根据连接速度调整质量。HLS在所有Apple设备上的移动应用中提供可靠的流媒体服务,并且是iOS的事实标准。

HLS vs DASH

DASH(Dynamic Adaptive Streaming over HTTP)是一种开放的MPEG标准,用于向移动应用传输媒体。与HLS不同,DASH对片段使用MP4格式,并使用XML清单(MPD)代替.m3u8。DASH提供了对编解码器的更多控制,并支持更多格式。在HLS和DASH之间进行选择是为移动设备开发流媒体时的关键决策。协议对比如下表所示。

参数 HLS DASH
开发者AppleMPEG(开放标准)
播放列表格式.m3u8.mpd(XML)
片段.ts或fMP4fMP4(任何编解码器)
原生支持iOS、macOS、tvOSAndroid、Web
自适应比特率是(avc1, mp4a)是(任何编解码器)
低延迟LL-HLS(2-5秒)LL-DASH(2-5秒)

在实践中,iOS应用选择HLS——AVPlayer原生支持它。对于Android,由于ExoPlayer更倾向于DASH。两种协议都适用于移动设备上的媒体流媒体。在IT Sectr,我们使用这两种技术,并建议根据目标平台选择协议。

自适应比特率和编解码器

Adaptive Bitrate(ABR)是一种机制,播放器根据连接速度自动选择视频质量。流以多种比特率(360p、720p、1080p、4K)编码。播放器在它们之间无缝切换。编解码器:H.264(AVC)——基础,H.265(HEVC)——效率提高50%,VP9和AV1——Android的开放替代方案。

对于移动应用中的硬件解码,选择正确的编解码器很重要。硬件解码使用设备的GPU/视频处理器,消耗更少的电量。软件解码在CPU上运行——在硬件解码不可用时使用。IT Sectr建议始终通过MediaCodec(Android)或AVAssetTrack(iOS)检查编解码器支持,以在移动设备上实现最佳媒体播放。

播放器:ExoPlayer和AVPlayer

ExoPlayer是Google为Android开发的媒体播放器,针对移动应用中的媒体播放进行了优化。与MediaPlayer不同,ExoPlayer不依赖于硬件解码,并通过扩展模块支持自定义方案。它支持HLS、DASH、SmoothStreaming和RTSP。ExoPlayer是YouTube、Google TV和Android TV的主要播放器。

ExoPlayer vs AVPlayerViewController

AVPlayer和AVPlayerViewController是Apple为iOS、macOS、tvOS开发的播放器。AVPlayer是低级API,AVPlayerViewController是带有PiP和AirPlay的现成UI包装器。主要区别:ExoPlayer提供对缓冲和渲染的完全控制,AVPlayerViewController以最少的代码提供快速集成。播放器的选择直接影响移动应用中的流媒体质量。

kotlin
// ExoPlayer — 在Android上设置基本播放器
val player = ExoPlayer.Builder(this)
    .setMediaSource(ProgressiveMediaSource.Factory(DefaultHttpDataSource.Factory()))
    .build()
val mediaItem = MediaItem.fromUri("https://example.com/stream.m3u8")
player.setMediaItem(mediaItem)
player.prepare()
player.playWhenReady = true

代码显示ExoPlayer的最小初始化:创建实例、设置媒体项和开始播放。ExoPlayer通过onStop中的player.release()自动处理Activity生命周期。对于Android TV或PiP,需要通过PlayerView进行额外的生命周期处理——这在为移动应用设置流媒体时尤其重要。

转码和视频处理

转码(Transcoding)是将视频从一种格式转换为另一种格式。用于优化不同移动设备的媒体流(例如H.264→H.265)。在移动设备上,可以通过MediaCodec(Android)或AVAssetExportSession(iOS)进行转码。转码消耗资源并耗电——请通过WorkManager或BGTaskScheduler在后台进行。

DRM:Widevine、FairPlay和PlayReady

数字版权管理(DRM)是保护媒体内容免遭未经授权复制的系统。移动应用中的优质媒体流媒体使用三种主要技术:Widevine(Google)、FairPlay(Apple)和PlayReady(Microsoft)。没有DRM,优质服务(Netflix、Spotify、Disney+)无法分发内容。

DRM系统比较

Widevine是Android的DRM保护标准,有三个级别:L3(软件加密)、L2、L1(硬件加密,仅限Trusted Execution Environment)。FairPlay是Apple的专有系统,在芯片级别使用SVP(安全视频管道)。PlayReady是Microsoft的系统,广泛用于Xbox和Windows设备。

Multi-DRM是一种方法,您使用单一平台管理所有DRM密钥。例如:EZDRM或Verimatrix。它们通过统一的API颁发Widevine、FairPlay和PlayReady许可证。Multi-DRM对于移动设备上的优质媒体尤其重要。在IT Sectr,我们通过聚合器实现multi-DRM——与单独集成每个DRM相比,这节省了时间和金钱。

音频播放:Audio Focus和Audio Session

Audio Focus(Android)是用于移动应用中媒体播放的音频流管理系统。当您的应用请求Audio Focus时,其他应用(音乐、播客)会暂停或降低音量(闪避)。如果没有Audio Focus,两个应用会同时播放,产生噪音。

Android上的Audio Focus

Android将音频流分为:MUSIC、VOICE_CALL、ALARM、NOTIFICATION。对于媒体播放器,您需要请求AudioManager.AUDIOFOCUS_GAIN。当失去焦点(来电)时,您必须暂停媒体播放,并在焦点恢复后继续。通过AudioManager.OnAudioFocusChangeListener实现。

iOS上的Audio Session

Audio Session(iOS)相当于Apple移动设备上媒体应用的Audio Focus。通过AVAudioSession.sharedInstance()配置。类别:.playback(视频必需)、.soloAmbient(默认,锁定时静音)、.playAndRecord(用于录音)。对于流媒体,请使用带有.allowAirPlay选项的.playback。

PiP和AirPlay

画中画(Picture-in-Picture,PiP)是一种模式,当应用最小化或导航到另一个屏幕时,媒体内容会继续在小浮动窗口中播放。PiP已成为移动设备上媒体应用的标准——iOS(自iPadOS 13起)和Android(自Android 8.0起)。

Android上的PiP

在Android上,PiP通过Activity.isInPictureInPictureMode()和PictureInPictureParams.Builder启用。应用必须处于多窗口模式。需要MediaSession来控制PiP窗口中的媒体播放。在清单中指定android:supportsPictureInPicture="true"。

AirPlay和Chromecast

AirPlay是Apple用于向Apple TV、HomePod和兼容智能电视流式传输媒体的协议。在iOS上,通过AVRoutePickerView或MPNowPlayingInfoCenter实现。在Android上,等效的是Google Cast SDK(Chromecast)。这两种技术都需要在二进制文件中进行配置并得到播放器的支持。没有它们,移动应用中的高质量流媒体是不可能的。

常见问题

对于移动应用,HLS和DASH哪个更好?

对于iOS,HLS更好——它由AVPlayer原生支持。对于Android和跨平台应用,DASH更可取,因为ExoPlayer提供了更好的DASH支持和更灵活的缓冲控制。协议的选择直接影响移动应用中的流媒体。

在流媒体应用中是否必须使用DRM?

DRM是必须的仅当您分发优质媒体内容(电影、音乐、课程)时。对于用户生成的内容或免费广播,不需要DRM。IT Sectr建议从没有DRM开始,只在需要时添加。

ExoPlayer和AVPlayerViewController有什么区别?

ExoPlayer是一个可定制的Android媒体播放器,支持DASH、HLS和SmoothStreaming。AVPlayerViewController是一个带有PiP和AirPlay的iOS原生播放器。ExoPlayer提供更多控制,AVPlayerViewController需要更少的代码。两者都在移动应用中提供高质量的媒体播放。

什么是画中画(PiP)以及如何实现它?

PiP是一种模式,当应用最小化时,媒体内容会在小窗口中继续播放。在iOS上通过AVPlayerViewController代理启用,在Android上通过PictureInPictureParams启用。需要清单配置和生命周期处理。

为什么需要Audio Focus和Audio Session?

Audio Focus(Android)和Audio Session(iOS)管理来自不同来源的同时音频播放。它们确保您的媒体应用正确响应来电、通知和其他音频应用的启动。

总结

  • HLS是iOS的标准,DASH是Android的标准。协议的选择取决于目标平台和低延迟要求。
  • ExoPlayer在Android上提供对媒体播放的完全控制。AVPlayerViewController在iOS上提供快速集成。
  • DRM(Widevine、FairPlay、PlayReady)保护优质媒体内容免遭盗版。Multi-DRM是优质服务的标准方法。
  • Audio Focus(Android)和Audio Session(iOS)管理应用的音频上下文。对于具有媒体播放功能的移动应用来说必不可少。
  • 画中画和AirPlay是现代媒体应用的关键功能。实现需要生命周期和播放器配置。
  • 自适应比特率(ABR)在移动设备上根据连接速度自动调整视频质量。使用后台任务进行转码。
  • 硬件解码节省移动设备的电池。在开始播放之前,始终通过系统API检查编解码器支持。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目