package im.actor.runtime.js.webrtc;
import im.actor.runtime.js.media.JsAudio;
import im.actor.runtime.js.webrtc.js.JsMediaStream;
import im.actor.runtime.webrtc.WebRTCMediaStream;
import im.actor.runtime.webrtc.WebRTCMediaTrack;
import im.actor.runtime.webrtc.WebRTCTrackType;
public class MediaStream implements WebRTCMediaStream {
private JsMediaStream stream;
private JsAudio audio;
private WebRTCMediaTrack[] audioTracks;
private WebRTCMediaTrack[] videoTracks;
private WebRTCMediaTrack[] allTracks;
public MediaStream(JsMediaStream stream) {
this(stream, true);
}
public MediaStream(JsMediaStream stream, boolean autoPlay) {
this.stream = stream;
this.audioTracks = new WebRTCMediaTrack[this.stream.getAudioTracks().length()];
this.videoTracks = new WebRTCMediaTrack[this.stream.getVideoTracks().length()];
this.allTracks = new WebRTCMediaTrack[audioTracks.length + videoTracks.length];
for (int i = 0; i < audioTracks.length; i++) {
audioTracks[i] = new MediaTrack(stream.getAudioTracks().get(i), WebRTCTrackType.AUDIO);
allTracks[i] = audioTracks[i];
}
for (int i = 0; i < videoTracks.length; i++) {
videoTracks[i] = new MediaTrack(stream.getVideoTracks().get(i), WebRTCTrackType.VIDEO);
allTracks[i + audioTracks.length] = videoTracks[i];
}
if (autoPlay) {
this.audio = JsAudio.create();
this.audio.setSourceStream(stream);
this.audio.play();
}
}
public JsMediaStream getStream() {
return stream;
}
public JsAudio getAudio() {
return audio;
}
@Override
public WebRTCMediaTrack[] getAudioTracks() {
return audioTracks;
}
@Override
public WebRTCMediaTrack[] getVideoTracks() {
return videoTracks;
}
@Override
public WebRTCMediaTrack[] getTracks() {
return allTracks;
}
@Override
public void close() {
if (audio != null) {
audio.pause();
audio.reset();
}
stream.stop();
}
}