首页 文章

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

提问于
浏览
10

我有一个使用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 回答

  • 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中包含的库,所以您可以控制使用的版本,并且可以轻松地将更新版本更新为常规应用程序更新的一部分 .

相关问题