Android 使用FFmpeg扩展的Exoplayer 2 AMR格式

Android 使用FFmpeg扩展的Exoplayer 2 AMR格式,android,exoplayer,android-ffmpeg,exoplayer2.x,Android,Exoplayer,Android Ffmpeg,Exoplayer2.x,我已经构建了exoplayer ffmpeg扩展并添加到我的项目中,因为我需要支持AMR格式,所以: 在本教程之后: 在编译步骤之后: cd "${FFMPEG_EXT_PATH}"/jni && \ ${NDK_PATH}/ndk-build APP_ABI="armeabi-v7a arm64-v8a x86" -j4 我已使用以下内容生成aar文件: ./gradlew :extensions-ffmpeg:assembleDebug 因此,我生成了扩展名为ffmpeg

我已经构建了exoplayer ffmpeg扩展并添加到我的项目中,因为我需要支持AMR格式,所以:

在本教程之后:

在编译步骤之后:

cd "${FFMPEG_EXT_PATH}"/jni && \
${NDK_PATH}/ndk-build APP_ABI="armeabi-v7a arm64-v8a x86" -j4
我已使用以下内容生成aar文件:

./gradlew :extensions-ffmpeg:assembleDebug
因此,我生成了扩展名为ffmpeg debug.arr的文件,并将其放入项目的lib文件夹中

我的播放器实现:

public class DefaultPlayer {

    private ExoPlayer player;

    //"flac" "amr" "wma" "wav" "3gp" "mp3"

    public DefaultPlayer(Context context) {

        DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
        playerInit(context, bandwidthMeter);

        try {
            testFormat(context);
        } catch (RawResourceDataSource.RawResourceDataSourceException e) {
            e.printStackTrace();
        }
    }

    private void testFormat(Context context) throws RawResourceDataSource.RawResourceDataSourceException {

        Uri uri = RawResourceDataSource.buildRawResourceUri(R.raw.sample_flac);
        final RawResourceDataSource dataSource = new RawResourceDataSource(context);
        dataSource.open(new DataSpec(uri));

        DefaultExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
        ExtractorMediaSource mediaSource = new ExtractorMediaSource(uri, new DataSource.Factory() {
            @Override
            public DataSource createDataSource() {
                return dataSource;
            }
        }, extractorsFactory, null, null);

        player.prepare(mediaSource);
        player.setPlayWhenReady(true);
    }

    private void playerInit(Context context, DefaultBandwidthMeter bandwidthMeter) {

        TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
        TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);

        player = ExoPlayerFactory.newSimpleInstance(context, trackSelector);
        player.addListener(new PlayerEventListener());
    }
}
错误:

08-04 16:03:53.405 10873-10918/br.com.andersonsilva.musicmodel E/ExoPlayerImplInternal: Source error.
                                                                                        com.google.android.exoplayer2.source.UnrecognizedInputFormatException: None of the available extractors (MatroskaExtractor, FragmentedMp4Extractor, Mp4Extractor, Mp3Extractor, AdtsExtractor, Ac3Extractor, TsExtractor, FlvExtractor, OggExtractor, PsExtractor, WavExtractor, FlacExtractor) could read the stream.
                                                                                            at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractorHolder.selectExtractor(ExtractorMediaPeriod.java:774)
                                                                                            at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:697)
                                                                                            at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:315)
                                                                                            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                                                                                            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                                                                                            at java.lang.Thread.run(Thread.java:761)
08-04 16:03:53.406 10873-10873/br.com.andersonsilva.musicmodel D/MUSIC: event: PlayerErrorEvent{error=com.google.android.exoplayer2.ExoPlaybackException}
08-04 16:03:53.407 10873-10873/br.com.andersonsilva.musicmodel D/MUSIC: event: PlayerStateChangedEvent{playWhenReady=true, playbackState=1}

运行AMR格式还需要配置什么,有人有什么建议吗?

是否在配置脚本中为所需类型启用了解码器?例如
-为
AMR-NB
启用解码器=amrnb
-为
AMR-WB
启用解码器=amrwb
@UlugToprak是的,我做到了!您好@AndersonK,您能给我发送aar文件吗?您在配置脚本中为所需类型启用了解码器吗?例如
-为
AMR-NB
启用解码器=amrnb
-为
AMR-WB
启用解码器=amrwb
@UlugToprak是的,我做到了!嗨@AndersonK,你能把aar文件寄给我吗?
08-04 16:03:53.405 10873-10918/br.com.andersonsilva.musicmodel E/ExoPlayerImplInternal: Source error.
                                                                                        com.google.android.exoplayer2.source.UnrecognizedInputFormatException: None of the available extractors (MatroskaExtractor, FragmentedMp4Extractor, Mp4Extractor, Mp3Extractor, AdtsExtractor, Ac3Extractor, TsExtractor, FlvExtractor, OggExtractor, PsExtractor, WavExtractor, FlacExtractor) could read the stream.
                                                                                            at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractorHolder.selectExtractor(ExtractorMediaPeriod.java:774)
                                                                                            at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:697)
                                                                                            at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:315)
                                                                                            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                                                                                            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                                                                                            at java.lang.Thread.run(Thread.java:761)
08-04 16:03:53.406 10873-10873/br.com.andersonsilva.musicmodel D/MUSIC: event: PlayerErrorEvent{error=com.google.android.exoplayer2.ExoPlaybackException}
08-04 16:03:53.407 10873-10873/br.com.andersonsilva.musicmodel D/MUSIC: event: PlayerStateChangedEvent{playWhenReady=true, playbackState=1}