【问题标题】:Exoplayer unable to stream certain AAC encoded audio with .m3u8Exoplayer 无法使用 .m3u8 流式传输某些 AAC 编码的音频
【发布时间】:2014-12-01 16:28:17
【问题描述】:

我正在将一个音频播放器项目从 Vitamio 移植到 ExoPlayer。我已经能够让它工作,除了我有两个无法播放的音频源。它们与其他可以完美播放的样本之间没有明显的区别。问题不在于样本长度,因为运行时间很长的样本也会播放。以下是示例文件的链接:

http://s3.amazonaws.com/instarad_audio/20/208888/index.m3u8 http://s3.amazonaws.com/instarad_audio/20/208237/index.m3u8

这是错误-->

java.lang.IllegalStateException 在 android.media.MediaCodec.dequeueOutputBuffer(本机方法) 在 com.google.android.exoplayer.MediaCodecTrackRenderer.drainOutputBuffer(MediaCodecTrackRenderer.java:720) 在 com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:420) 在 com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:398) 在 com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:203) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:157) 在 android.os.HandlerThread.run(HandlerThread.java:61) 在 com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)

11-27 17:50:05.423 28529-28571/com.google.android.exoplayer.demo E/OMXNodeInstance﹕缓冲区 h 的 OMX_FreeBuffer

我将这些样本创建为 TYPE_HLS_MEDIA,使用 AUDIO_AAC 编码或 VIDEO_H264。

我最好的猜测是这些样本是以异常的采样率记录的,或者它们在某种程度上已经损坏了。

所有样本都将通过 .m3u8 格式编码为 AAC 流。还有其他我应该查看的渲染器/编码器吗?

谢谢你, 大卫

【问题讨论】:

    标签: android audio-streaming aac vitamio exoplayer


    【解决方案1】:

    此链接包含 aac 音频,但 aac 配置文件是 LTP,google AAC 软件解码器不支持。这意味着此链接也不适用于任何旧版 android 设备。所以这不是您的应用程序的缺陷。

    General
    ID                                       : 1 (0x1)
    Complete name                            : a.ts
    Format                                   : MPEG-TS
    File size                                : 2.00 MiB
    Duration                                 : 1mn 33s
    Overall bit rate mode                    : Variable
    Overall bit rate                         : 180 Kbps
    
    Audio
    ID                                       : 256 (0x100)
    Menu ID                                  : 1 (0x1)
    Format                                   : AAC
    Format/Info                              : Advanced Audio Codec
    Format version                           : Version 4
    Format profile                           : LTP
    Muxing mode                              : ADTS
    Codec ID                                 : 15
    Duration                                 : 1mn 33s
    Bit rate mode                            : Variable
    Channel(s)                               : 1 channel
    Channel positions                        : Front: C
    Sampling rate                            : 44.1 KHz
    Compression mode                         : Lossy
    
    Menu
    ID                                       : 4096 (0x1000)
    Menu ID                                  : 1 (0x1)
    Duration                                 : 1mn 33s
    List                                     : 256 (0x100) (AAC)
    Service name                             : Service01
    Service provider                         : Libav
    Service type                             : digital television
    

    【讨论】:

    • 我已与 ExoPlayer 团队确认问题在于坏样本是用 AAC_LTP 编码的。这是他们 github 页面上的线程链接。 github.com/google/ExoPlayer/issues/178。我正在考虑使用 MediaCodec api 添加编码功能,或者限制来自 MediaRecorder 的编码。可能是 Android MediaRecorder 正在使用 AAC_LTP 创建样本;即使它无法播放该格式。
    • 您使用什么工具来分析音频样本?
    猜你喜欢
    • 2019-05-15
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 2012-02-19
    • 1970-01-01
    • 2019-01-07
    相关资源
    最近更新 更多