1

アプリで 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)
4

1 に答える 1

3

Telegram 音声メッセージを再生しようとして同様の問題が発生しました ( https://core.telegram.org/bots/api#getfileおよびhttps://core.telegram.org/bots/api#sendvoiceを参照)。Androidではなくラズベリーパイですが、同じ理由である可能性があると推測しています。

Telegram の音声メッセージは、 OPUSでエンコードされたOGGファイルであることが判明しました。(おそらくこれは、質問に対する最新のコメントでユーザー support_ms が参照しているものです)。

少なくとも ubuntu と raspbian では、OPUS コーデックがインストールされていませんでした。コマンドラインツールsudo apt-get install opus-toolsを入手するために必要でした。opusdec

を使用して、 Telegram から にダウンロードしopusdecたファイルをデコードし、 で再生できました。.ogg.wavaplay

これと同等のAndroidが本当にわかりませんが、あなたの質問がかなり古いことを考えると、この情報は、* nix環境でOPUSエンコードされたファイルをデコード/再生しようとしているあなたや他の人にとって同等の価値があると思います.

それが役に立てば幸い!

于 2016-04-02T23:44:43.667 に答える