Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2017 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 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 67 virtual void OnSuccess() { LOG(INFO) << __FUNCTION__; } | 67 virtual void OnSuccess() { LOG(INFO) << __FUNCTION__; } |
| 68 virtual void OnFailure(const std::string& error) { | 68 virtual void OnFailure(const std::string& error) { |
| 69 LOG(INFO) << __FUNCTION__ << " " << error; | 69 LOG(INFO) << __FUNCTION__ << " " << error; |
| 70 } | 70 } |
| 71 | 71 |
| 72 protected: | 72 protected: |
| 73 DummySetSessionDescriptionObserver() {} | 73 DummySetSessionDescriptionObserver() {} |
| 74 ~DummySetSessionDescriptionObserver() {} | 74 ~DummySetSessionDescriptionObserver() {} |
| 75 }; | 75 }; |
| 76 | 76 |
| 77 class DummyCapturer : public cricket::VideoCapturer { | |
| 78 public: | |
| 79 cricket::CaptureState Start( | |
| 80 const cricket::VideoFormat& capture_format) override { | |
| 81 return cricket::CS_RUNNING; | |
| 82 } | |
| 83 void Stop() override {} | |
| 84 void AddOrUpdateSink(rtc::VideoSinkInterface<webrtc::VideoFrame>* sink, | |
| 85 const rtc::VideoSinkWants& wants) override {} | |
| 86 | |
| 87 bool IsRunning() override { return true; } | |
| 88 bool IsScreencast() const override { return false; } | |
| 89 bool GetPreferredFourccs(std::vector<uint32_t>* fourccs) override { | |
| 90 return true; | |
| 91 } | |
| 92 }; | |
| 93 | |
| 77 } // namespace | 94 } // namespace |
| 78 | 95 |
| 79 bool SimplePeerConnection::InitializePeerConnection(const char** turn_urls, | 96 bool SimplePeerConnection::InitializePeerConnection(const char** turn_urls, |
| 80 const int no_of_urls, | 97 const int no_of_urls, |
| 81 const char* username, | 98 const char* username, |
| 82 const char* credential, | 99 const char* credential, |
| 83 bool is_receiver) { | 100 bool is_receiver) { |
| 84 RTC_DCHECK(peer_connection_.get() == nullptr); | 101 RTC_DCHECK(peer_connection_.get() == nullptr); |
| 85 | 102 |
| 86 if (g_peer_connection_factory == nullptr) { | 103 if (g_peer_connection_factory == nullptr) { |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 400 | 417 |
| 401 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream = | 418 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream = |
| 402 g_peer_connection_factory->CreateLocalMediaStream(kStreamLabel); | 419 g_peer_connection_factory->CreateLocalMediaStream(kStreamLabel); |
| 403 | 420 |
| 404 rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track( | 421 rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track( |
| 405 g_peer_connection_factory->CreateAudioTrack( | 422 g_peer_connection_factory->CreateAudioTrack( |
| 406 kAudioLabel, g_peer_connection_factory->CreateAudioSource(nullptr))); | 423 kAudioLabel, g_peer_connection_factory->CreateAudioSource(nullptr))); |
| 407 std::string id = audio_track->id(); | 424 std::string id = audio_track->id(); |
| 408 stream->AddTrack(audio_track); | 425 stream->AddTrack(audio_track); |
| 409 | 426 |
| 427 #if defined(WEBRTC_ANDROID) | |
|
GeorgeZ
2017/09/19 08:21:20
Dummy capturer should work but may not the best so
qiangchen
2017/09/19 17:57:45
Unfortunately, that does not work. I think this pr
| |
| 428 JNIEnv* env = webrtc::jni::GetEnv(); | |
| 429 jclass pc_factory_class = | |
| 430 unity_plugin::FindClass(env, "org/webrtc/UnityUtility"); | |
| 431 jmethodID load_texture_helper_method = webrtc::jni::GetStaticMethodID( | |
| 432 env, pc_factory_class, "LoadSurfaceTextureHelper", | |
| 433 "()Lorg/webrtc/SurfaceTextureHelper;"); | |
| 434 jobject texture_helper = | |
| 435 env->CallStaticObjectMethod(pc_factory_class, load_texture_helper_method); | |
| 436 CHECK_EXCEPTION(env); | |
| 437 RTC_DCHECK(texture_helper != nullptr) | |
| 438 << "Cannot get the Surface Texture Helper."; | |
| 439 | |
| 440 rtc::scoped_refptr<webrtc::jni::AndroidVideoTrackSource> source( | |
| 441 new rtc::RefCountedObject<webrtc::jni::AndroidVideoTrackSource>( | |
| 442 g_signaling_thread.get(), env, texture_helper, false)); | |
| 443 rtc::scoped_refptr<webrtc::VideoTrackSourceProxy> proxy_source = | |
| 444 webrtc::VideoTrackSourceProxy::Create(g_signaling_thread.get(), | |
| 445 g_worker_thread.get(), source); | |
| 446 | |
| 447 // link with VideoCapturer (Camera); | |
| 410 if (!audio_only) { | 448 if (!audio_only) { |
| 411 #if defined(WEBRTC_ANDROID) | |
| 412 JNIEnv* env = webrtc::jni::GetEnv(); | |
| 413 jclass pc_factory_class = | |
| 414 unity_plugin::FindClass(env, "org/webrtc/UnityUtility"); | |
| 415 jmethodID load_texture_helper_method = webrtc::jni::GetStaticMethodID( | |
| 416 env, pc_factory_class, "LoadSurfaceTextureHelper", | |
| 417 "()Lorg/webrtc/SurfaceTextureHelper;"); | |
| 418 jobject texture_helper = env->CallStaticObjectMethod( | |
| 419 pc_factory_class, load_texture_helper_method); | |
| 420 CHECK_EXCEPTION(env); | |
| 421 RTC_DCHECK(texture_helper != nullptr) | |
| 422 << "Cannot get the Surface Texture Helper."; | |
| 423 | |
| 424 rtc::scoped_refptr<AndroidVideoTrackSource> source( | |
| 425 new rtc::RefCountedObject<AndroidVideoTrackSource>( | |
| 426 g_signaling_thread.get(), env, texture_helper, false)); | |
| 427 rtc::scoped_refptr<webrtc::VideoTrackSourceProxy> proxy_source = | |
| 428 webrtc::VideoTrackSourceProxy::Create(g_signaling_thread.get(), | |
| 429 g_worker_thread.get(), source); | |
| 430 | |
| 431 // link with VideoCapturer (Camera); | |
| 432 jmethodID link_camera_method = webrtc::jni::GetStaticMethodID( | 449 jmethodID link_camera_method = webrtc::jni::GetStaticMethodID( |
| 433 env, pc_factory_class, "LinkCamera", | 450 env, pc_factory_class, "LinkCamera", |
| 434 "(JLorg/webrtc/SurfaceTextureHelper;)Lorg/webrtc/VideoCapturer;"); | 451 "(JLorg/webrtc/SurfaceTextureHelper;)Lorg/webrtc/VideoCapturer;"); |
| 435 jobject camera_tmp = | 452 jobject camera_tmp = |
| 436 env->CallStaticObjectMethod(pc_factory_class, link_camera_method, | 453 env->CallStaticObjectMethod(pc_factory_class, link_camera_method, |
| 437 (jlong)proxy_source.get(), texture_helper); | 454 (jlong)proxy_source.get(), texture_helper); |
| 438 CHECK_EXCEPTION(env); | 455 CHECK_EXCEPTION(env); |
| 439 g_camera = (jobject)env->NewGlobalRef(camera_tmp); | 456 g_camera = (jobject)env->NewGlobalRef(camera_tmp); |
| 457 } | |
| 440 | 458 |
| 459 rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track( | |
| 460 g_peer_connection_factory->CreateVideoTrack(kVideoLabel, | |
| 461 proxy_source.release())); | |
| 462 stream->AddTrack(video_track); | |
| 463 #else | |
| 464 std::unique_ptr<cricket::VideoCapturer> capture; | |
| 465 if (!audio_only) { | |
| 466 capture = OpenVideoCaptureDevice(); | |
| 467 } else { | |
| 468 capture.reset(new DummyCapturer()); | |
| 469 } | |
| 470 if (capture) { | |
| 441 rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track( | 471 rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track( |
| 442 g_peer_connection_factory->CreateVideoTrack(kVideoLabel, | 472 g_peer_connection_factory->CreateVideoTrack( |
| 443 proxy_source.release())); | 473 kVideoLabel, g_peer_connection_factory->CreateVideoSource( |
| 474 std::move(capture), nullptr))); | |
| 475 | |
| 444 stream->AddTrack(video_track); | 476 stream->AddTrack(video_track); |
| 445 #else | 477 } |
| 446 std::unique_ptr<cricket::VideoCapturer> capture = OpenVideoCaptureDevice(); | |
| 447 if (capture) { | |
| 448 rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track( | |
| 449 g_peer_connection_factory->CreateVideoTrack( | |
| 450 kVideoLabel, g_peer_connection_factory->CreateVideoSource( | |
| 451 std::move(capture), nullptr))); | |
| 452 | 478 |
| 453 stream->AddTrack(video_track); | |
| 454 } | |
| 455 #endif | 479 #endif |
| 456 if (local_video_observer_ && !stream->GetVideoTracks().empty()) { | 480 if (local_video_observer_ && !stream->GetVideoTracks().empty()) { |
| 457 stream->GetVideoTracks()[0]->AddOrUpdateSink(local_video_observer_.get(), | 481 stream->GetVideoTracks()[0]->AddOrUpdateSink(local_video_observer_.get(), |
| 458 rtc::VideoSinkWants()); | 482 rtc::VideoSinkWants()); |
| 459 } | 483 } |
| 460 } | |
| 461 | 484 |
| 462 if (!peer_connection_->AddStream(stream)) { | 485 if (!peer_connection_->AddStream(stream)) { |
| 463 LOG(LS_ERROR) << "Adding stream to PeerConnection failed"; | 486 LOG(LS_ERROR) << "Adding stream to PeerConnection failed"; |
| 464 } | 487 } |
| 465 | 488 |
| 466 typedef std::pair<std::string, | 489 typedef std::pair<std::string, |
| 467 rtc::scoped_refptr<webrtc::MediaStreamInterface>> | 490 rtc::scoped_refptr<webrtc::MediaStreamInterface>> |
| 468 MediaStreamPair; | 491 MediaStreamPair; |
| 469 active_streams_.insert(MediaStreamPair(stream->label(), stream)); | 492 active_streams_.insert(MediaStreamPair(stream->label(), stream)); |
| 470 } | 493 } |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 556 | 579 |
| 557 for (const auto& param : params) { | 580 for (const auto& param : params) { |
| 558 uint32_t ssrc = param.ssrc.value_or(0); | 581 uint32_t ssrc = param.ssrc.value_or(0); |
| 559 if (ssrc > 0) | 582 if (ssrc > 0) |
| 560 ssrcs.push_back(ssrc); | 583 ssrcs.push_back(ssrc); |
| 561 } | 584 } |
| 562 } | 585 } |
| 563 | 586 |
| 564 return ssrcs; | 587 return ssrcs; |
| 565 } | 588 } |
| OLD | NEW |