我有一个使用MediaPlayer的应用程序,当我流式传输下载MP3时工作正常 . 我试图使用相同的应用程序来传输进度下载AAC文件 . 它播放文件很好 . 当我尝试使用带有AAC的MediaPlayer.seekTo()在流中跳过时,什么不起作用 . 这在mp3中再次正常工作 . 对于AAC流,它只是在零时重新开始播放 .
我的感觉是编码相关 . 尚未正确配置AAC文件以进行流式传输 .
以下是MediaInfo工具的输出:
Size: 2.3 MB
Format: QuickTime/MPEG-4/Motion JPEG 2000 format
Stream count: 2
Duration: 00:05:02
Bit rate: 64 kb/s
Meta info:
album_artist: Red Hot Chili Peppers
album: The Getaway
minor_version: 512
encoder: Lavf57.41.100
title: Dark Necessities
major_brand: M4V
track: 2
disc: 1
compatible_brands: isomiso2avc1
artist: Red Hot Chili Peppers
copyright: 2016 Warner Bros. Records Inc.
genre: Alternative
Stream 0
Type: video
Codec: h264
Codec profile: High 10
FourCC: avc1
Duration: 00:00:00
Width: 350
Height: 350
Sample aspect ratio: 1:1
Display aspect ratio: 1:1
Pixel format: yuv420p10le
Frame rate: 90000 fps
Meta info:
handler_name: VideoHandler
language: und
Stream 1
Type: audio
Codec: aac
FourCC: mp4a
Duration: 00:05:02
Bit rate: 64 kb/s
Sample rate: 44100 Hz
Sample format: s16
Channel: 2
Meta info:
handler_name: SoundHandler
language: und
您会注意到它实际上是一个带有AAC音频的视频文件,并且不包含真实视频 . 如果是这种情况,那么我认为当我要求可能加载或未加载的部分流时,需要更多元数据来知道在哪里播放 . 此外,视频需要关键帧才能知道在哪里播放,因此我认为流/文件中不包含任何关键帧或“提示”框 .
我没有找到任何有关缺失或有可能的真实细节的运气 . 我已经在其他版本上测试了这个,似乎在5.0.2之前它运行了 . 在5.0.2之后它不起作用 . 我没有找到有关该版本更改内容的任何详细信息 .
因此,这可能是一个流编码问题,不允许我们通过渐进式下载http流来传输此文件 . 或者,它可能是Android Media Player在5.0.2时间框架内创建的错误 . 或者它可能都是 .
为什么这不起作用?
1 回答
试试Exoplayer,就这么简单
ExoPlayer与Android内置的MediaPlayer相比具有许多优势:
支持HTTP上的动态自适应流媒体(DASH)和SmoothStreaming,MediaPlayer都不支持它们(它还支持HTTP直播流(HLS),MP4,MP3,WebM,M4A,MPEG-TS和AAC) .
支持高级HLS功能,例如正确处理#EXT-X-DISCONTINUITY标记 .
能够根据您的使用情况自定义和扩展播放器 . ExoPlayer专为此而设计,允许使用自定义实现替换许多组件 .
轻松更新播放器和应用程序 . 因为ExoPlayer是您在应用程序apk中包含的库,所以您可以控制使用的版本,并且可以轻松地将更新版本更新为常规应用程序更新的一部分 .