Am trying to change the audio track in the cast, As mentioned here https://developers.google.com/cast/docs/android_sender/media_tracks, and did as mentioned there
and everything came successful in the log but the audio track is not changing
Am i doing anything wrong, as mention i get getStatusCode()
as 0
status code and still audio track is not changing
public void getVideos() {
VideoAdapter adapter = new VideoAdapter (this, videoList);
recyclerView.setAdapter(adapter);
adapter.setOnItemClickListener((pos, v) -> {
stopCastServer();
String videoPath = webServerController.getMediaInfo(videoList.get(pos).getUrl(), false);
final ExecutorService service = Executors.newSingleThreadExecutor();
ExoPlayer player = new ExoPlayer.Builder(this).build();
MediaItem mediaItem = MediaItem.fromUri(videoPath);
player.setMediaItem(mediaItem);
player.prepare();
ListenableFuture<TrackGroupArray> trackGroupsFuture = MetadataRetriever.retrieveMetadata(this, mediaItem);
Futures.addCallback(trackGroupsFuture, new FutureCallback<TrackGroupArray>() {
@Override
public void onSuccess(TrackGroupArray trackGroups) {
for(int i = 0; i < trackGroups.length; i++){
String format = trackGroups.get(i).getFormat(0).sampleMimeType;
String lang = trackGroups.get(i).getFormat(0).language;
String id = trackGroups.get(i).getFormat(0).id;
if (format != null && format.contains("application") && id != null && lang != null) {
Log.d(TAG, "onSuccess: subtitle " + lang + " " + id + " SERIAL " + i);
tracks.add(new MediaTrack.Builder(i, MediaTrack.TYPE_TEXT)
.setName(lang + " Subtitle")
.setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
.setContentId(id)
.setLanguage(lang)
.build());
} else if (format != null && format.contains("audio") && id != null && lang != null) {
Log.d(TAG, "onSuccess: audio " + lang + " " + id + " SERIAL " + i);
tracks.add(new MediaTrack.Builder(i, MediaTrack.TYPE_AUDIO)
.setName(lang + " Audio")
.setContentId(id)
.setLanguage(lang)
.build());
}
}
Log.d(TAG, "onSuccess: " + tracks + " url " + videoPath);
}
@Override
public void onFailure(@NonNull Throwable t) {
Log.d(TAG, "onFailure: " + t);
}
}, service);
new AlertDialog.Builder(MainActivity.this)
.setTitle("first entry")
.setMessage("load media to remote media client")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
loadRemoteMedia(0,false, videoPath);
}
})
.setNegativeButton(android.R.string.no, null)
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
});
}
private void loadRemoteMedia(int position, boolean autoPlay, String videoUrl) {
if (mCastSession == null) {
return;
}
RemoteMediaClient remoteMediaClient = mCastSession.getRemoteMediaClient();
if (remoteMediaClient == null) {
return;
}
remoteMediaClient.load(new MediaLoadRequestData.Builder()
.setMediaInfo(buildMediaInfo(videoUrl))
.setAutoplay(autoPlay)
.setCurrentTime(position).build());
new AlertDialog.Builder(MainActivity.this)
.setTitle("second entry")
.setMessage("selecting audio track")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
remoteMediaClient.setActiveMediaTracks(new long[]{});
remoteMediaClient.setActiveMediaTracks(new long[]{3})
.setResultCallback(mediaChannelResult -> {
if (mediaChannelResult.getStatus().isSuccess()) {
Log.d(TAG, "onClick: onSuccess "
+ mediaChannelResult.getStatus().getStatusCode());
} else {
Log.e(TAG, "Failed with status code: onSuccess "
+ mediaChannelResult.getStatus().getStatusCode());
}
});
}
})
.setNegativeButton(android.R.string.no, null)
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
}
private MediaInfo buildMediaInfo(String videoUrl) {
MediaMetadata movieMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE);
Log.d(TAG, "onSuccess: " + tracks);
return new MediaInfo.Builder(videoUrl)
.setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
.setContentType("videos/mp4")
.setMetadata(movieMetadata)
.setMediaTracks(tracks) // List<MediaTrack> tracks = new ArrayList<>();
.setStreamDuration(100000 * 1000)
.build();
}
Is there anyway i could change audio language in casting in android ?
Since exoplayer doesn`t allow changing tracks while casting video, So changing tracks doesnt allowed. and after raising a issue in exoplayer https://github.com/google/ExoPlayer/issues/9687
and recieved CastPlayer
currently does not support changing tracks I'm afraid. We have the issue marked as an enhancement
and https://github.com/google/ExoPlayer#deprecation` its deprecated will no longer have update on it.