媒体与流媒体是现代移动开发的关键能力之一。根据Statista(2025年)的数据,全球视频流媒体市场到2027年将超过1000亿美元。移动设备占所有流媒体平台流量的60%以上。开发人员需要了解协议、播放器、内容保护机制以及画中画等功能。移动应用中的高质量流媒体需要掌握所有这些技术。
要点
HTTP Live Streaming(HLS)是Apple开发的用于移动应用流媒体的协议。它将视频分割成小段(通常6-10秒),并通过普通HTTP传输。播放器下载播放列表(.m3u8)并顺序加载片段,根据连接速度调整质量。HLS在所有Apple设备上的移动应用中提供可靠的流媒体服务,并且是iOS的事实标准。
DASH(Dynamic Adaptive Streaming over HTTP)是一种开放的MPEG标准,用于向移动应用传输媒体。与HLS不同,DASH对片段使用MP4格式,并使用XML清单(MPD)代替.m3u8。DASH提供了对编解码器的更多控制,并支持更多格式。在HLS和DASH之间进行选择是为移动设备开发流媒体时的关键决策。协议对比如下表所示。
| 参数 | HLS | DASH |
|---|---|---|
| 开发者 | Apple | MPEG(开放标准) |
| 播放列表格式 | .m3u8 | .mpd(XML) |
| 片段 | .ts或fMP4 | fMP4(任何编解码器) |
| 原生支持 | iOS、macOS、tvOS | Android、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是Google为Android开发的媒体播放器,针对移动应用中的媒体播放进行了优化。与MediaPlayer不同,ExoPlayer不依赖于硬件解码,并通过扩展模块支持自定义方案。它支持HLS、DASH、SmoothStreaming和RTSP。ExoPlayer是YouTube、Google TV和Android TV的主要播放器。
AVPlayer和AVPlayerViewController是Apple为iOS、macOS、tvOS开发的播放器。AVPlayer是低级API,AVPlayerViewController是带有PiP和AirPlay的现成UI包装器。主要区别:ExoPlayer提供对缓冲和渲染的完全控制,AVPlayerViewController以最少的代码提供快速集成。播放器的选择直接影响移动应用中的流媒体质量。
// 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(Google)、FairPlay(Apple)和PlayReady(Microsoft)。没有DRM,优质服务(Netflix、Spotify、Disney+)无法分发内容。
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(Android)是用于移动应用中媒体播放的音频流管理系统。当您的应用请求Audio Focus时,其他应用(音乐、播客)会暂停或降低音量(闪避)。如果没有Audio Focus,两个应用会同时播放,产生噪音。
Android将音频流分为:MUSIC、VOICE_CALL、ALARM、NOTIFICATION。对于媒体播放器,您需要请求AudioManager.AUDIOFOCUS_GAIN。当失去焦点(来电)时,您必须暂停媒体播放,并在焦点恢复后继续。通过AudioManager.OnAudioFocusChangeListener实现。
Audio Session(iOS)相当于Apple移动设备上媒体应用的Audio Focus。通过AVAudioSession.sharedInstance()配置。类别:.playback(视频必需)、.soloAmbient(默认,锁定时静音)、.playAndRecord(用于录音)。对于流媒体,请使用带有.allowAirPlay选项的.playback。
画中画(Picture-in-Picture,PiP)是一种模式,当应用最小化或导航到另一个屏幕时,媒体内容会继续在小浮动窗口中播放。PiP已成为移动设备上媒体应用的标准——iOS(自iPadOS 13起)和Android(自Android 8.0起)。
在Android上,PiP通过Activity.isInPictureInPictureMode()和PictureInPictureParams.Builder启用。应用必须处于多窗口模式。需要MediaSession来控制PiP窗口中的媒体播放。在清单中指定android:supportsPictureInPicture="true"。
AirPlay是Apple用于向Apple TV、HomePod和兼容智能电视流式传输媒体的协议。在iOS上,通过AVRoutePickerView或MPNowPlayingInfoCenter实现。在Android上,等效的是Google Cast SDK(Chromecast)。这两种技术都需要在二进制文件中进行配置并得到播放器的支持。没有它们,移动应用中的高质量流媒体是不可能的。
常见问题
对于iOS,HLS更好——它由AVPlayer原生支持。对于Android和跨平台应用,DASH更可取,因为ExoPlayer提供了更好的DASH支持和更灵活的缓冲控制。协议的选择直接影响移动应用中的流媒体。
DRM是必须的仅当您分发优质媒体内容(电影、音乐、课程)时。对于用户生成的内容或免费广播,不需要DRM。IT Sectr建议从没有DRM开始,只在需要时添加。
ExoPlayer是一个可定制的Android媒体播放器,支持DASH、HLS和SmoothStreaming。AVPlayerViewController是一个带有PiP和AirPlay的iOS原生播放器。ExoPlayer提供更多控制,AVPlayerViewController需要更少的代码。两者都在移动应用中提供高质量的媒体播放。
PiP是一种模式,当应用最小化时,媒体内容会在小窗口中继续播放。在iOS上通过AVPlayerViewController代理启用,在Android上通过PictureInPictureParams启用。需要清单配置和生命周期处理。
Audio Focus(Android)和Audio Session(iOS)管理来自不同来源的同时音频播放。它们确保您的媒体应用正确响应来电、通知和其他音频应用的启动。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。