【问题标题】:Can't play Telegram ogg audio files in android无法在 android 中播放 Telegram ogg 音频文件
【发布时间】:2015-08-27 08:26:42
【问题描述】:

我希望我的应用播放 SD 卡中的 .ogg 音频文件,但媒体播放器和 SoundPool 无法对某些特定的 ogg 文件执行此操作。我无法播放的样本声音属于 Telegram。下面的代码适用于其他 ogg 文件和 mp3 格式,但在播放此类声音时会出错。

    try {
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setDataSource("/storage/emulated/0/Audio/test.ogg");
        mediaPlayer.prepare();
        mediaPlayer.start();
        //works good for mp3 files
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(context, "error", Toast.LENGTH_SHORT).show();
    }

示例文件下载链接: http://www.mediafire.com/download/fxr4z4hh7b2gv50/test.ogg

它抛出这个异常:

08-27 13:50:43.244: V/MediaPlayer[Native](5163): constructor
08-27 13:50:43.245: V/MediaPlayer[Native](5163): setListener
08-27 13:50:43.245: E/ExtMediaPlayer-JNI(5163): QCMediaPlayer could not be located....
08-27 13:50:43.245: E/MediaPlayer-JNI(5163): QCMediaPlayer mediaplayer NOT present
08-27 13:50:43.249: V/MediaPlayer[Native](5163): setDataSource(38, 0, 576460752303423487)
08-27 13:50:43.253: V/MediaPlayer[Native](5163): message received msg=8, ext1=0, ext2=0
08-27 13:50:43.253: V/MediaPlayer[Native](5163): notify(8, 0, 0) callback on disconnected mediaplayer
08-27 13:50:43.254: E/MediaPlayer[Native](5163): Unable to create media player
08-27 13:50:43.258: W/System.err(5163): java.io.IOException: setDataSourceFD failed.: status=0x80000000
08-27 13:50:43.258: W/System.err(5163):     at android.media.MediaPlayer._setDataSource(Native Method)
08-27 13:50:43.258: W/System.err(5163):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1109)
08-27 13:50:43.259: W/System.err(5163):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1094)
08-27 13:50:43.259: W/System.err(5163):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1073)
08-27 13:50:43.259: W/System.err(5163):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1022)
08-27 13:50:43.259: W/System.err(5163):     at com.bobardo.funnyringtones.MainActivity.onCreate(MainActivity.java:99)
08-27 13:50:43.259: W/System.err(5163):     at android.app.Activity.performCreate(Activity.java:5977)
08-27 13:50:43.259: W/System.err(5163):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
08-27 13:50:43.259: W/System.err(5163):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2258)
08-27 13:50:43.259: W/System.err(5163):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2367)
08-27 13:50:43.259: W/System.err(5163):     at android.app.ActivityThread.access$800(ActivityThread.java:148)
08-27 13:50:43.259: W/System.err(5163):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283)
08-27 13:50:43.259: W/System.err(5163):     at android.os.Handler.dispatchMessage(Handler.java:102)
08-27 13:50:43.259: W/System.err(5163):     at android.os.Looper.loop(Looper.java:135)
08-27 13:50:43.259: W/System.err(5163):     at android.app.ActivityThread.main(ActivityThread.java:5274)
08-27 13:50:43.259: W/System.err(5163):     at java.lang.reflect.Method.invoke(Native Method)
08-27 13:50:43.259: W/System.err(5163):     at java.lang.reflect.Method.invoke(Method.java:372)
08-27 13:50:43.259: W/System.err(5163):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909)
08-27 13:50:43.259: W/System.err(5163):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)

【问题讨论】:

  • 它会抛出异常吗?还;您是否能够播放存储在同一文件夹中的 mp3 文件?
  • 我编辑了帖子,是的,它引发了异常。 mp3没有存放在同一个目录下,但我确定路径是正确的。

标签: java android audio ogg telegram


【解决方案1】:

我在尝试播放 Telegram 语音消息时遇到了类似的问题(请参阅 https://core.telegram.org/bots/api#getfilehttps://core.telegram.org/bots/api#sendvoice)。不是在 android 中,而是在 raspberry pi 中,虽然我猜可能是出于同样的原因。

原来 Telegram 语音消息是用OPUS 编码的OGG 文件。 (也许这就是用户 support_ms 在对您问题的最新评论中所指的内容)。

至少在 ubuntu 和 raspbian 中,我没有安装 OPUS 编解码器。我必须sudo apt-get install opus-tools 才能获得opusdec 命令行工具。

使用opusdec我可以解码从Telegram下载到.wav.ogg文件,然后用aplay播放。

我真的不知道 android 与此等效,但鉴于您的问题相当陈旧,我认为此信息可能对您和其他尝试在 *nix 环境中解码/播放 OPUS 编码文件的人具有同等价值。

希望对你有帮助!

【讨论】:

  • 谢谢,你是对的。电报声音是用 OPUS 编码的。所以几个月前我通过使用电报开源项目和播放音频的类解决了我的问题。
猜你喜欢
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多