【问题标题】:How can I change audio track in Exo player in android如何在 android 的 Exo 播放器中更改音轨
【发布时间】:2021-01-12 18:53:30
【问题描述】:

我有一些带有两个音轨的视频,我想在视频播放期间将音轨更改为另一种语言。

我已经尝试了一切,但仍然没有成功

这是我的代码,我正在使用 firebase 存储来存储视频。

我到处搜索,但找不到解决方案。

我的代码正在运行,仍然没有出现任何错误,但我无法更改音轨。

public class NewVideoActivity extends AppCompatActivity {

    SimpleExoPlayerView exoPlayerView;
    SimpleExoPlayer exoPlayer;
    String videoURL;
    private ImageView selectTracksButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new_video);

        getSupportActionBar().hide();

        selectTracksButton = findViewById(R.id.audioTrack);



        videoURL = getIntent().getStringExtra("Link");

        exoPlayerView = (SimpleExoPlayerView) findViewById(R.id.exo_player_view);
        try {


            BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
            TrackSelector trackSelector = new DefaultTrackSelector(new AdaptiveTrackSelection.Factory(bandwidthMeter));
            exoPlayer = ExoPlayerFactory.newSimpleInstance(this, trackSelector);




            Uri videoURI = Uri.parse(videoURL);

            DefaultHttpDataSourceFactory dataSourceFactory = new DefaultHttpDataSourceFactory("exoplayer_video");
            ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
            MediaSource mediaSource = new ExtractorMediaSource(videoURI, dataSourceFactory, extractorsFactory, null, null);




            exoPlayerView.setPlayer(exoPlayer);

            exoPlayer.prepare(mediaSource);
            exoPlayer.setPlayWhenReady(true);


        }catch (Exception e){
            Log.e("MainAcvtivity"," exoplayer error "+ e.toString());
        }
}

【问题讨论】:

    标签: java android exoplayer2.x


    【解决方案1】:

    女巫 ExoPlayer 2.11.7。这段代码对我来说效果很好:

      public void setAudioTrack(int track) {
        System.out.println("setAudioTrack: "  + track);
        MappingTrackSelector.MappedTrackInfo mappedTrackInfo = Assertions.checkNotNull(trackSelector.getCurrentMappedTrackInfo());
        DefaultTrackSelector.Parameters parameters = trackSelector.getParameters();
        DefaultTrackSelector.ParametersBuilder builder = parameters.buildUpon();
        for (int rendererIndex = 0; rendererIndex < mappedTrackInfo.getRendererCount(); rendererIndex++) {
            int trackType = mappedTrackInfo.getRendererType(rendererIndex);
            if (trackType == C.TRACK_TYPE_AUDIO) {
                builder.clearSelectionOverrides(rendererIndex).setRendererDisabled(rendererIndex, false);
                int groupIndex = track -1;
                int [] tracks = {0}; 
                DefaultTrackSelector.SelectionOverride override = new DefaultTrackSelector.SelectionOverride(groupIndex,tracks);
                builder.setSelectionOverride(rendererIndex, mappedTrackInfo.getTrackGroups(rendererIndex), override);
            }
        }
        trackSelector.setParameters(builder);
        curentAudioTrack = track;
    }
    

    希望能帮到你。

    【讨论】:

    • 这里的int track是什么@share pvv
    • 这里的int track是什么
    【解决方案2】:

    您可以使用hls视频(.m3u8扩展名)格式解决。

    offical documentation

    简单的代码

        trackSelector = new DefaultTrackSelector();
        trackSelector.setParameters(
                trackSelector.getParameters().buildUpon().setMaxVideoSizeSd()
                .setPreferredTextLanguage("en")
                .setPreferredAudioLanguage("en").build());
    

    您可以在此处将支持的语言作为方法的参数 如果可用的支持多潜文本,您也可以以同样的方式将参数作为方法 (setPreferredTextLanguage) 提供。

    languages code list

    为您提供的示例 hls 视频网址

    https://wowzaec2demo.streamlock.net/vod-multitrack/definst/smil:ElephantsDream/ElephantsDream.smil/playlist.m3u8

    此 hls 视频支持两种音频语言;英语和西班牙语(en, es)

    希望对你有帮助

    【讨论】:

    • 如何查询文件中可用的音频语言?
    猜你喜欢
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    相关资源
    最近更新 更多