OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2014 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2014 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 package org.appspot.apprtc; | 11 package org.appspot.apprtc; |
12 | 12 |
13 import org.appspot.apprtc.AppRTCClient.SignalingParameters; | |
14 | |
15 import android.content.Context; | 13 import android.content.Context; |
16 import android.os.Environment; | 14 import android.os.Environment; |
17 import android.os.ParcelFileDescriptor; | 15 import android.os.ParcelFileDescriptor; |
18 import android.util.Log; | 16 import android.util.Log; |
19 | 17 import java.io.File; |
| 18 import java.io.IOException; |
| 19 import java.util.Collections; |
| 20 import java.util.EnumSet; |
| 21 import java.util.LinkedList; |
| 22 import java.util.List; |
| 23 import java.util.Timer; |
| 24 import java.util.TimerTask; |
| 25 import java.util.concurrent.Executors; |
| 26 import java.util.concurrent.ScheduledExecutorService; |
| 27 import java.util.regex.Matcher; |
| 28 import java.util.regex.Pattern; |
| 29 import org.appspot.apprtc.AppRTCClient.SignalingParameters; |
20 import org.webrtc.AudioSource; | 30 import org.webrtc.AudioSource; |
21 import org.webrtc.AudioTrack; | 31 import org.webrtc.AudioTrack; |
22 import org.webrtc.CameraVideoCapturer; | 32 import org.webrtc.CameraVideoCapturer; |
23 import org.webrtc.DataChannel; | 33 import org.webrtc.DataChannel; |
24 import org.webrtc.EglBase; | 34 import org.webrtc.EglBase; |
25 import org.webrtc.IceCandidate; | 35 import org.webrtc.IceCandidate; |
26 import org.webrtc.Logging; | 36 import org.webrtc.Logging; |
27 import org.webrtc.MediaConstraints; | 37 import org.webrtc.MediaConstraints; |
28 import org.webrtc.MediaStream; | 38 import org.webrtc.MediaStream; |
29 import org.webrtc.PeerConnection; | 39 import org.webrtc.PeerConnection; |
30 import org.webrtc.PeerConnection.IceConnectionState; | 40 import org.webrtc.PeerConnection.IceConnectionState; |
31 import org.webrtc.PeerConnectionFactory; | 41 import org.webrtc.PeerConnectionFactory; |
32 import org.webrtc.RtpParameters; | 42 import org.webrtc.RtpParameters; |
33 import org.webrtc.RtpSender; | 43 import org.webrtc.RtpSender; |
34 import org.webrtc.SdpObserver; | 44 import org.webrtc.SdpObserver; |
35 import org.webrtc.SessionDescription; | 45 import org.webrtc.SessionDescription; |
36 import org.webrtc.StatsObserver; | 46 import org.webrtc.StatsObserver; |
37 import org.webrtc.StatsReport; | 47 import org.webrtc.StatsReport; |
38 import org.webrtc.VideoCapturer; | 48 import org.webrtc.VideoCapturer; |
39 import org.webrtc.VideoRenderer; | 49 import org.webrtc.VideoRenderer; |
40 import org.webrtc.VideoSource; | 50 import org.webrtc.VideoSource; |
41 import org.webrtc.VideoTrack; | 51 import org.webrtc.VideoTrack; |
42 import org.webrtc.voiceengine.WebRtcAudioManager; | 52 import org.webrtc.voiceengine.WebRtcAudioManager; |
43 import org.webrtc.voiceengine.WebRtcAudioUtils; | 53 import org.webrtc.voiceengine.WebRtcAudioUtils; |
44 | 54 |
45 import java.io.File; | |
46 import java.io.IOException; | |
47 import java.util.Collections; | |
48 import java.util.EnumSet; | |
49 import java.util.LinkedList; | |
50 import java.util.List; | |
51 import java.util.Timer; | |
52 import java.util.TimerTask; | |
53 import java.util.concurrent.Executors; | |
54 import java.util.concurrent.ScheduledExecutorService; | |
55 import java.util.regex.Matcher; | |
56 import java.util.regex.Pattern; | |
57 | |
58 /** | 55 /** |
59 * Peer connection client implementation. | 56 * Peer connection client implementation. |
60 * | 57 * |
61 * <p>All public methods are routed to local looper thread. | 58 * <p>All public methods are routed to local looper thread. |
62 * All PeerConnectionEvents callbacks are invoked from the same looper thread. | 59 * All PeerConnectionEvents callbacks are invoked from the same looper thread. |
63 * This class is a singleton. | 60 * This class is a singleton. |
64 */ | 61 */ |
65 public class PeerConnectionClient { | 62 public class PeerConnectionClient { |
66 public static final String VIDEO_TRACK_ID = "ARDAMSv0"; | 63 public static final String VIDEO_TRACK_ID = "ARDAMSv0"; |
67 public static final String AUDIO_TRACK_ID = "ARDAMSa0"; | 64 public static final String AUDIO_TRACK_ID = "ARDAMSa0"; |
68 public static final String VIDEO_TRACK_TYPE = "video"; | 65 public static final String VIDEO_TRACK_TYPE = "video"; |
69 private static final String TAG = "PCRTCClient"; | 66 private static final String TAG = "PCRTCClient"; |
70 private static final String VIDEO_CODEC_VP8 = "VP8"; | 67 private static final String VIDEO_CODEC_VP8 = "VP8"; |
71 private static final String VIDEO_CODEC_VP9 = "VP9"; | 68 private static final String VIDEO_CODEC_VP9 = "VP9"; |
72 private static final String VIDEO_CODEC_H264 = "H264"; | 69 private static final String VIDEO_CODEC_H264 = "H264"; |
73 private static final String AUDIO_CODEC_OPUS = "opus"; | 70 private static final String AUDIO_CODEC_OPUS = "opus"; |
74 private static final String AUDIO_CODEC_ISAC = "ISAC"; | 71 private static final String AUDIO_CODEC_ISAC = "ISAC"; |
75 private static final String VIDEO_CODEC_PARAM_START_BITRATE = "x-google-start-
bitrate"; | 72 private static final String VIDEO_CODEC_PARAM_START_BITRATE = "x-google-start-
bitrate"; |
76 private static final String AUDIO_CODEC_PARAM_BITRATE = "maxaveragebitrate"; | 73 private static final String AUDIO_CODEC_PARAM_BITRATE = "maxaveragebitrate"; |
77 private static final String AUDIO_ECHO_CANCELLATION_CONSTRAINT = "googEchoCanc
ellation"; | 74 private static final String AUDIO_ECHO_CANCELLATION_CONSTRAINT = "googEchoCanc
ellation"; |
78 private static final String AUDIO_AUTO_GAIN_CONTROL_CONSTRAINT = "googAutoGain
Control"; | 75 private static final String AUDIO_AUTO_GAIN_CONTROL_CONSTRAINT = "googAutoGain
Control"; |
79 private static final String AUDIO_HIGH_PASS_FILTER_CONSTRAINT = "googHighpassF
ilter"; | 76 private static final String AUDIO_HIGH_PASS_FILTER_CONSTRAINT = "googHighpassF
ilter"; |
80 private static final String AUDIO_NOISE_SUPPRESSION_CONSTRAINT = "googNoiseSup
pression"; | 77 private static final String AUDIO_NOISE_SUPPRESSION_CONSTRAINT = "googNoiseSup
pression"; |
81 private static final String AUDIO_LEVEL_CONTROL_CONSTRAINT = "levelControl"; | 78 private static final String AUDIO_LEVEL_CONTROL_CONSTRAINT = "levelControl"; |
82 private static final String DTLS_SRTP_KEY_AGREEMENT_CONSTRAINT = "DtlsSrtpKeyA
greement"; | 79 private static final String DTLS_SRTP_KEY_AGREEMENT_CONSTRAINT = "DtlsSrtpKeyA
greement"; |
83 private static final int HD_VIDEO_WIDTH = 1280; | 80 private static final int HD_VIDEO_WIDTH = 1280; |
84 private static final int HD_VIDEO_HEIGHT = 720; | 81 private static final int HD_VIDEO_HEIGHT = 720; |
85 private static final int MAX_VIDEO_WIDTH = 1280; | |
86 private static final int MAX_VIDEO_HEIGHT = 1280; | |
87 private static final int MAX_VIDEO_FPS = 30; | |
88 private static final int BPS_IN_KBPS = 1000; | 82 private static final int BPS_IN_KBPS = 1000; |
89 | 83 |
90 private static final PeerConnectionClient instance = new PeerConnectionClient(
); | 84 private static final PeerConnectionClient instance = new PeerConnectionClient(
); |
91 private final PCObserver pcObserver = new PCObserver(); | 85 private final PCObserver pcObserver = new PCObserver(); |
92 private final SDPObserver sdpObserver = new SDPObserver(); | 86 private final SDPObserver sdpObserver = new SDPObserver(); |
93 private final ScheduledExecutorService executor; | 87 private final ScheduledExecutorService executor; |
94 | 88 |
95 private Context context; | 89 private Context context; |
96 private PeerConnectionFactory factory; | 90 private PeerConnectionFactory factory; |
97 private PeerConnection peerConnection; | 91 private PeerConnection peerConnection; |
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
421 // If video resolution is not specified, default to HD. | 415 // If video resolution is not specified, default to HD. |
422 if (videoWidth == 0 || videoHeight == 0) { | 416 if (videoWidth == 0 || videoHeight == 0) { |
423 videoWidth = HD_VIDEO_WIDTH; | 417 videoWidth = HD_VIDEO_WIDTH; |
424 videoHeight = HD_VIDEO_HEIGHT; | 418 videoHeight = HD_VIDEO_HEIGHT; |
425 } | 419 } |
426 | 420 |
427 // If fps is not specified, default to 30. | 421 // If fps is not specified, default to 30. |
428 if (videoFps == 0) { | 422 if (videoFps == 0) { |
429 videoFps = 30; | 423 videoFps = 30; |
430 } | 424 } |
431 | 425 Logging.d(TAG, "Capturing format: " + videoWidth + "x" + videoHeight + "@"
+ videoFps); |
432 videoWidth = Math.min(videoWidth, MAX_VIDEO_WIDTH); | |
433 videoHeight = Math.min(videoHeight, MAX_VIDEO_HEIGHT); | |
434 videoFps = Math.min(videoFps, MAX_VIDEO_FPS); | |
435 } | 426 } |
436 | 427 |
437 // Create audio constraints. | 428 // Create audio constraints. |
438 audioConstraints = new MediaConstraints(); | 429 audioConstraints = new MediaConstraints(); |
439 // added for audio performance measurements | 430 // added for audio performance measurements |
440 if (peerConnectionParameters.noAudioProcessing) { | 431 if (peerConnectionParameters.noAudioProcessing) { |
441 Log.d(TAG, "Disabling audio processing"); | 432 Log.d(TAG, "Disabling audio processing"); |
442 audioConstraints.mandatory.add( | 433 audioConstraints.mandatory.add( |
443 new MediaConstraints.KeyValuePair(AUDIO_ECHO_CANCELLATION_CONSTRAINT,
"false")); | 434 new MediaConstraints.KeyValuePair(AUDIO_ECHO_CANCELLATION_CONSTRAINT,
"false")); |
444 audioConstraints.mandatory.add( | 435 audioConstraints.mandatory.add( |
(...skipping 722 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1167 public void onCreateFailure(final String error) { | 1158 public void onCreateFailure(final String error) { |
1168 reportError("createSDP error: " + error); | 1159 reportError("createSDP error: " + error); |
1169 } | 1160 } |
1170 | 1161 |
1171 @Override | 1162 @Override |
1172 public void onSetFailure(final String error) { | 1163 public void onSetFailure(final String error) { |
1173 reportError("setSDP error: " + error); | 1164 reportError("setSDP error: " + error); |
1174 } | 1165 } |
1175 } | 1166 } |
1176 } | 1167 } |
OLD | NEW |