如何使用Android MediaPlayer使AAC可以通过http流进行搜索?

时间:2017-05-28 19:36:44

标签: android stream android-mediaplayer aac

我有一个使用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(s)流传输此文件。或者,它可能是Android Media Player在5.0.2时间框架内创建的错误。或者它可能都是。

为什么这不起作用?

1 个答案:

答案 0 :(得分:1)

尝试使用Exoplayer,这很简单

与Android内置的MediaPlayer相比,

ExoPlayer具有许多优势:

  • 支持HTTP上的动态自适应流媒体(DASH)和SmoothStreaming,MediaPlayer都不支持它们(它还支持HTTP直播流(HLS),MP4,MP3,WebM,M4A,MPEG-TS和AAC)。
  • 支持高级HLS功能,例如正确处理#EXT-X-DISCONTINUITY标签。
  • 能够根据您的使用情况自定义和扩展播放器。 ExoPlayer专为此而设计,允许使用自定义实现替换许多组件。
  • 轻松更新播放器和应用程序。由于ExoPlayer是您在应用程序apk中包含的库,因此您可以控制使用的版本,并且可以轻松地将更新版本更新为常规应用程序更新的一部分。
相关问题