java - 如何在 android 的 Exo 播放器中更改音轨
问题描述
我有一些带有两个音轨的视频,我想在视频播放期间将音轨更改为另一种语言。
我已经尝试了一切,但仍然没有成功
这是我的代码,我正在使用 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());
}
}
解决方案
女巫 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;
}
希望能帮到你。
推荐阅读
- css - CSS中价格类后的货币符号
- bluedata - BlueData MLOPS - PermissionError:[Errno 13] 权限被拒绝
- c# - 传入的串行数据循环导致我的程序冻结
- python - 从数据框的一列绘制 2 个变量
- javascript - 一种快速计算JS中大集合的组合和排列比的方法
- java - 无法从 Java 执行 Python 脚本
- spring - 弹簧数据休息端点的非确定性生成
- javascript - 模块构建失败(来自 ./node_modules/babel-loader/lib/index.js):错误:找不到模块 './src/data'
- java - Kafka 的流 API 能否帮助分发数百个分页请求?
- windows - “Git Bash Here”创建一个带有非功能版本 git 的 bash 终端