Index: examples/unityplugin/simple_peer_connection.cc |
diff --git a/examples/unityplugin/simple_peer_connection.cc b/examples/unityplugin/simple_peer_connection.cc |
index fe59d53a6f5728517762300d0f2a60ff546f398e..ce6eb9d6889afe5e54d07eb4f981f2f22e0d6829 100644 |
--- a/examples/unityplugin/simple_peer_connection.cc |
+++ b/examples/unityplugin/simple_peer_connection.cc |
@@ -74,6 +74,23 @@ class DummySetSessionDescriptionObserver |
~DummySetSessionDescriptionObserver() {} |
}; |
+class DummyCapturer : public cricket::VideoCapturer { |
+ public: |
+ cricket::CaptureState Start( |
+ const cricket::VideoFormat& capture_format) override { |
+ return cricket::CS_RUNNING; |
+ } |
+ void Stop() override {} |
+ void AddOrUpdateSink(rtc::VideoSinkInterface<webrtc::VideoFrame>* sink, |
+ const rtc::VideoSinkWants& wants) override {} |
+ |
+ bool IsRunning() override { return true; } |
+ bool IsScreencast() const override { return false; } |
+ bool GetPreferredFourccs(std::vector<uint32_t>* fourccs) override { |
+ return true; |
+ } |
+}; |
+ |
} // namespace |
bool SimplePeerConnection::InitializePeerConnection(const char** turn_urls, |
@@ -407,28 +424,28 @@ void SimplePeerConnection::AddStreams(bool audio_only) { |
std::string id = audio_track->id(); |
stream->AddTrack(audio_track); |
- if (!audio_only) { |
#if defined(WEBRTC_ANDROID) |
- JNIEnv* env = webrtc::jni::GetEnv(); |
- jclass pc_factory_class = |
- unity_plugin::FindClass(env, "org/webrtc/UnityUtility"); |
- jmethodID load_texture_helper_method = webrtc::jni::GetStaticMethodID( |
- env, pc_factory_class, "LoadSurfaceTextureHelper", |
- "()Lorg/webrtc/SurfaceTextureHelper;"); |
- jobject texture_helper = env->CallStaticObjectMethod( |
- pc_factory_class, load_texture_helper_method); |
- CHECK_EXCEPTION(env); |
- RTC_DCHECK(texture_helper != nullptr) |
- << "Cannot get the Surface Texture Helper."; |
- |
- rtc::scoped_refptr<AndroidVideoTrackSource> source( |
- new rtc::RefCountedObject<AndroidVideoTrackSource>( |
- g_signaling_thread.get(), env, texture_helper, false)); |
- rtc::scoped_refptr<webrtc::VideoTrackSourceProxy> proxy_source = |
- webrtc::VideoTrackSourceProxy::Create(g_signaling_thread.get(), |
- g_worker_thread.get(), source); |
- |
- // link with VideoCapturer (Camera); |
+ JNIEnv* env = webrtc::jni::GetEnv(); |
+ jclass pc_factory_class = |
+ unity_plugin::FindClass(env, "org/webrtc/UnityUtility"); |
+ jmethodID load_texture_helper_method = webrtc::jni::GetStaticMethodID( |
+ env, pc_factory_class, "LoadSurfaceTextureHelper", |
+ "()Lorg/webrtc/SurfaceTextureHelper;"); |
+ jobject texture_helper = |
+ env->CallStaticObjectMethod(pc_factory_class, load_texture_helper_method); |
+ CHECK_EXCEPTION(env); |
+ RTC_DCHECK(texture_helper != nullptr) |
+ << "Cannot get the Surface Texture Helper."; |
+ |
+ rtc::scoped_refptr<webrtc::jni::AndroidVideoTrackSource> source( |
+ new rtc::RefCountedObject<webrtc::jni::AndroidVideoTrackSource>( |
+ g_signaling_thread.get(), env, texture_helper, false)); |
+ rtc::scoped_refptr<webrtc::VideoTrackSourceProxy> proxy_source = |
+ webrtc::VideoTrackSourceProxy::Create(g_signaling_thread.get(), |
+ g_worker_thread.get(), source); |
+ |
+ // link with VideoCapturer (Camera); |
+ if (!audio_only) { |
jmethodID link_camera_method = webrtc::jni::GetStaticMethodID( |
env, pc_factory_class, "LinkCamera", |
"(JLorg/webrtc/SurfaceTextureHelper;)Lorg/webrtc/VideoCapturer;"); |
@@ -437,27 +454,33 @@ void SimplePeerConnection::AddStreams(bool audio_only) { |
(jlong)proxy_source.get(), texture_helper); |
CHECK_EXCEPTION(env); |
g_camera = (jobject)env->NewGlobalRef(camera_tmp); |
+ } |
+ rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track( |
+ g_peer_connection_factory->CreateVideoTrack(kVideoLabel, |
+ proxy_source.release())); |
+ stream->AddTrack(video_track); |
+#else |
+ std::unique_ptr<cricket::VideoCapturer> capture; |
+ if (!audio_only) { |
+ capture = OpenVideoCaptureDevice(); |
+ } else { |
+ capture.reset(new DummyCapturer()); |
+ } |
+ if (capture) { |
rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track( |
- g_peer_connection_factory->CreateVideoTrack(kVideoLabel, |
- proxy_source.release())); |
+ g_peer_connection_factory->CreateVideoTrack( |
+ kVideoLabel, g_peer_connection_factory->CreateVideoSource( |
+ std::move(capture), nullptr))); |
+ |
stream->AddTrack(video_track); |
-#else |
- std::unique_ptr<cricket::VideoCapturer> capture = OpenVideoCaptureDevice(); |
- if (capture) { |
- rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track( |
- g_peer_connection_factory->CreateVideoTrack( |
- kVideoLabel, g_peer_connection_factory->CreateVideoSource( |
- std::move(capture), nullptr))); |
- |
- stream->AddTrack(video_track); |
- } |
+ } |
+ |
#endif |
if (local_video_observer_ && !stream->GetVideoTracks().empty()) { |
stream->GetVideoTracks()[0]->AddOrUpdateSink(local_video_observer_.get(), |
rtc::VideoSinkWants()); |
} |
- } |
if (!peer_connection_->AddStream(stream)) { |
LOG(LS_ERROR) << "Adding stream to PeerConnection failed"; |