Files
platform-external-webrtc/sdk/android/api/org/webrtc/MediaStreamTrack.java
Seth Hampson 9a58cc00e0 Update the android AppRTC to use PeerConnection Unified Plan API.
This updates AppRTC to use addTrack instead of addStream, and removes
the use of onAddStream, because we no longer have to wait for this to be
fired to set the remote track's video renderers.

Bug: webrtc:8869
Change-Id: I1ecae684a9bc4b30512e8c5d717e72b52c589831
Reviewed-on: https://webrtc-review.googlesource.com/57840
Commit-Queue: Seth Hampson <shampson@webrtc.org>
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22318}
2018-03-07 01:56:01 +00:00

108 lines
2.8 KiB
Java

/*
* Copyright 2013 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
package org.webrtc;
/** Java wrapper for a C++ MediaStreamTrackInterface. */
@JNINamespace("webrtc::jni")
public class MediaStreamTrack {
public static final String AUDIO_TRACK_KIND = "audio";
public static final String VIDEO_TRACK_KIND = "video";
/** Tracks MediaStreamTrackInterface.TrackState */
public enum State {
LIVE,
ENDED;
@CalledByNative("State")
static State fromNativeIndex(int nativeIndex) {
return values()[nativeIndex];
}
}
// Must be kept in sync with cricket::MediaType.
public enum MediaType {
MEDIA_TYPE_AUDIO(0),
MEDIA_TYPE_VIDEO(1);
private final int nativeIndex;
private MediaType(int nativeIndex) {
this.nativeIndex = nativeIndex;
}
@CalledByNative("MediaType")
int getNative() {
return nativeIndex;
}
@CalledByNative("MediaType")
static MediaType fromNativeIndex(int nativeIndex) {
for (MediaType type : MediaType.values()) {
if (type.getNative() == nativeIndex) {
return type;
}
}
throw new IllegalArgumentException("Unknown native media type: " + nativeIndex);
}
}
/** Factory method to create an AudioTrack or VideoTrack subclass. */
static MediaStreamTrack createMediaStreamTrack(long nativeTrack) {
if (nativeTrack == 0) {
return null;
}
String trackKind = nativeGetKind(nativeTrack);
if (trackKind.equals(AUDIO_TRACK_KIND)) {
return new AudioTrack(nativeTrack);
} else if (trackKind.equals(VIDEO_TRACK_KIND)) {
return new VideoTrack(nativeTrack);
} else {
return null;
}
}
final long nativeTrack;
public MediaStreamTrack(long nativeTrack) {
this.nativeTrack = nativeTrack;
}
public String id() {
return nativeGetId(nativeTrack);
}
public String kind() {
return nativeGetKind(nativeTrack);
}
public boolean enabled() {
return nativeGetEnabled(nativeTrack);
}
public boolean setEnabled(boolean enable) {
return nativeSetEnabled(nativeTrack, enable);
}
public State state() {
return nativeGetState(nativeTrack);
}
public void dispose() {
JniCommon.nativeReleaseRef(nativeTrack);
}
private static native String nativeGetId(long track);
private static native String nativeGetKind(long track);
private static native boolean nativeGetEnabled(long track);
private static native boolean nativeSetEnabled(long track, boolean enabled);
private static native State nativeGetState(long track);
}