diff --git a/AnyCore/AnyCore.def b/AnyCore/AnyCore.def new file mode 100644 index 0000000000000000000000000000000000000000..4821394b0d572e7798cb3d176b43d7723b726a75 --- /dev/null +++ b/AnyCore/AnyCore.def @@ -0,0 +1,6 @@ +; AnyCore.def : 声明 DLL 的模块参数。 + +LIBRARY "AnyCore" + +EXPORTS + ; 此处可以是显式导出 diff --git a/AnyCore/AnyCore.filters b/AnyCore/AnyCore.filters new file mode 100644 index 0000000000000000000000000000000000000000..217d617b55ffcc2bdac52b4a7cd926440a96790b --- /dev/null +++ b/AnyCore/AnyCore.filters @@ -0,0 +1,93 @@ +锘 + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {ed61ffc6-8e41-4f3b-9171-5dcd35201e66} + + + + + rtmp + + + 婧愭枃浠 + + + 婧愭枃浠 + + + 婧愭枃浠 + + + 婧愭枃浠 + + + 婧愭枃浠 + + + 婧愭枃浠 + + + 婧愭枃浠 + + + 婧愭枃浠 + + + 婧愭枃浠 + + + 婧愭枃浠 + + + + + rtmp + + + 澶存枃浠 + + + 澶存枃浠 + + + 澶存枃浠 + + + 澶存枃浠 + + + 澶存枃浠 + + + 澶存枃浠 + + + rtmp + + + 澶存枃浠 + + + 澶存枃浠 + + + 澶存枃浠 + + + 澶存枃浠 + + + \ No newline at end of file diff --git a/AnyCore/AnyCore.vcxproj b/AnyCore/AnyCore.vcxproj new file mode 100644 index 0000000000000000000000000000000000000000..0119c57c7a3be32fd79d30e945e7c656e2803712 --- /dev/null +++ b/AnyCore/AnyCore.vcxproj @@ -0,0 +1,193 @@ +锘 + + + + Debug + Win32 + + + Release + Win32 + + + + {2E1012CB-6F96-4444-A4F8-F932F8421D34} + Win32Proj + AnyCore + AnyCore + 8.1 + + + + DynamicLibrary + true + v140 + Unicode + false + + + DynamicLibrary + false + v140 + true + Unicode + + + + + + + + + + + + + true + ..\out\$(Configuration)\ + $(OutDir)obj\$(ProjectName)\ + + + false + ..\out\$(Configuration)\ + $(OutDir)obj\$(ProjectName)\ + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;NOMINMAX;WEBRTC_WIN;_CRT_SECURE_NO_WARNINGS;WEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE;LIV_EXPORTS;%(PreprocessorDefinitions) + true + ../;./srs_librtmp;../third_party/faac-1.28/include;../third_party/mp4v2/include;%(AdditionalIncludeDirectories) + MultiThreadedDebug + + + Console + true + ws2_32.lib;winmm.lib;Strmiids.lib;Quartz.lib;dmoguids.lib;msdmo.lib;wmcodecdspuuid.lib;%(AdditionalDependencies) + .\AnyCore.def + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + MultiThreaded + + + Console + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {856bb8cf-b944-4d7a-9d59-4945316229aa} + + + {482da264-ee88-4575-b208-87c4cb80cd08} + + + {e4505a22-7591-fedf-6b9f-4ff8ab727ff9} + + + {b49de8dd-f78d-f7cf-052d-8f9aed62d088} + + + {1ad2b7cf-c61c-43cd-8a27-4c52ef9cc5d3} + + + {93f855f4-ee6f-f00d-f4a3-35577b1d5f76} + + + {510deddc-ed2f-0a3b-abe1-f7f1e6d75cf8} + + + {39fe2bb0-c2e7-db9c-d514-19b221f3ca00} + + + {b6b37b26-252c-247d-dba3-d03511ac9509} + + + {ac613f26-3b4f-2df0-f78c-52b6d0770c2d} + + + {cc4cc1bb-4534-3322-5d30-6f7b749e7cde} + + + {1deac0d1-003d-95f6-6693-ef0f1a5c733a} + + + {e7e494c8-f0d0-4376-4006-c691bb4233ef} + + + {bd794cba-b6ac-1a8f-784e-89f56fda8b8d} + + + {58c4e66e-f613-82e0-c039-7a453bcac1e4} + + + {e3cc8540-9e4f-66f9-d430-efdae52dedac} + + + {c93cb6a3-741a-2433-10d3-fc2ce462281b} + + + {5569b280-3a89-5837-bd37-c3a976c6f597} + + + {16fe3fd5-aa01-bd2a-2bff-7785ffededec} + + + {4e00d9e2-1f74-8d2e-1878-dcfe215138f5} + + + + + + \ No newline at end of file diff --git a/AnyCore/RtmpHosterImpl.cc b/AnyCore/RtmpHosterImpl.cc index 2e2fdd89e27bd6eddb9e392c4b3b7b133a466b0a..09ee5897a56fec77847f5229e46a229831db1b91 100644 --- a/AnyCore/RtmpHosterImpl.cc +++ b/AnyCore/RtmpHosterImpl.cc @@ -300,6 +300,9 @@ void RtmpHosterImpl::OnMessage(rtc::Message* msg) { if (msg->message_id == MSG_START_RTMP) { av_rtmp_streamer_->StartStream(rtmp_url_); + if (video_capturer_.get() == NULL) { + av_rtmp_streamer_->SetVideoEnable(false); + } } else if (msg->message_id == MSG_STOP_RTMP) { av_rtmp_streamer_->StopStream(); diff --git a/AnyCore/anyrtmpstream_interface.h b/AnyCore/anyrtmpstream_interface.h index 370e7bb27e4779e40501b9c9787a5af4b52b3d94..9ab8664e79430819dd08b43292a067d52e22eaa0 100644 --- a/AnyCore/anyrtmpstream_interface.h +++ b/AnyCore/anyrtmpstream_interface.h @@ -12,6 +12,7 @@ public: static AnyRtmpstreamer* Create(AnyRtmpstreamerEvent&callback); virtual void SetAudioEnable(bool enabled) = 0; + virtual void SetVideoEnable(bool enabled) = 0; virtual void SetAutoAdjustBit(bool enabled) = 0; virtual void SetVideoParameter(int w, int h, int bitrate) = 0; virtual void SetBitrate(int bitrate) = 0; diff --git a/AnyCore/anyrtmpstreamer.cc b/AnyCore/anyrtmpstreamer.cc index d96385d49f5550a110d1d889ee23c0a170985247..d5f23ea82bfdf8a17a9cddd6da841680262efb26 100644 --- a/AnyCore/anyrtmpstreamer.cc +++ b/AnyCore/anyrtmpstreamer.cc @@ -83,6 +83,13 @@ void AnyRtmpStreamerImpl::SetAudioEnable(bool enabled) } } +void AnyRtmpStreamerImpl::SetVideoEnable(bool enabled) +{ + if (!enabled && av_rtmp_) { + av_rtmp_->EnableOnlyAudioMode(); + } +} + void AnyRtmpStreamerImpl::SetAutoAdjustBit(bool enabled) { auto_adjust_bit_ = enabled; @@ -152,7 +159,7 @@ void AnyRtmpStreamerImpl::OnRtmpConnected() callback_.OnStreamOk(); } -void AnyRtmpStreamerImpl::OnRrmpReconntecting(int times) +void AnyRtmpStreamerImpl::OnRtmpReconnecting(int times) { StopEncoder(); callback_.OnStreamReconnecting(times); diff --git a/AnyCore/anyrtmpstreamer.h b/AnyCore/anyrtmpstreamer.h index 9d5e3df3bb5c5e459b6bb0603ce73ded45d39f7a..26a63419b3cbd3cb23c87230fb6839c510b77600 100644 --- a/AnyCore/anyrtmpstreamer.h +++ b/AnyCore/anyrtmpstreamer.h @@ -40,6 +40,7 @@ public: webrtc::AudioSinkInterface* GetAudioSink(){ return a_aac_encoder_; }; rtc::VideoSinkInterface* GetVideoSink() {return v_h264_encoder_;}; virtual void SetAudioEnable(bool enabled); + virtual void SetVideoEnable(bool enabled); virtual void SetAutoAdjustBit(bool enabled); virtual void SetVideoParameter(int w, int h, int bitrate); virtual void SetBitrate(int bitrate); @@ -53,7 +54,7 @@ public: //* For AnyRtmpushCallback virtual void OnRtmpConnected(); - virtual void OnRrmpReconntecting(int times); + virtual void OnRtmpReconnecting(int times); virtual void OnRtmpDisconnect(); virtual void OnRtmpStatusEvent(int delayMs, int netBand); diff --git a/AnyCore/anyrtmpush.cc b/AnyCore/anyrtmpush.cc index e277ce55e0fcef7d0b97c793b4da9a54eb578d02..9b7be5c1a06653616d06486e2512777c8fe585c7 100644 --- a/AnyCore/anyrtmpush.cc +++ b/AnyCore/anyrtmpush.cc @@ -26,6 +26,7 @@ AnyRtmpPush::AnyRtmpPush(AnyRtmpushCallback&callback, const std::string&url) : callback_(callback) , running_(false) , need_keyframe_(true) +, only_audio_mode_(false) , retrys_(0) , stat_time_(0) , net_band_(0) @@ -69,6 +70,11 @@ AnyRtmpPush::~AnyRtmpPush(void) } } +void AnyRtmpPush::EnableOnlyAudioMode() +{ + only_audio_mode_ = true; +} + void AnyRtmpPush::SetVideoParameter(int width, int height, int videodatarate, int framerate){ video_width_ = width; video_height_ = height; @@ -191,7 +197,7 @@ void AnyRtmpPush::SetH264Data(uint8_t* pData, int len, uint32_t ts) void AnyRtmpPush::SetAacData(uint8_t* pData, int nLen, uint32_t ts) { - if(need_keyframe_) + if(need_keyframe_ && !only_audio_mode_) return; EncData* pdata = new EncData(); pdata->_data = new uint8_t[nLen]; @@ -427,7 +433,6 @@ void AnyRtmpPush::CallConnect() } } callback_.OnRtmpConnected(); - setMetaData(); } void AnyRtmpPush::CallDisconnect() @@ -445,7 +450,7 @@ void AnyRtmpPush::CallDisconnect() if(retrys_ <= MAX_RETRY_TIME) { rtmp_ = srs_rtmp_create(str_url_.c_str()); - callback_.OnRrmpReconntecting(retrys_); + callback_.OnRtmpReconnecting(retrys_); } else { callback_.OnRtmpDisconnect(); } diff --git a/AnyCore/anyrtmpush.h b/AnyCore/anyrtmpush.h index 3af20faf003a159dbce350ed5bf526d8f49544f0..274002e8cbb4aad81240a3364506a1230697c52e 100644 --- a/AnyCore/anyrtmpush.h +++ b/AnyCore/anyrtmpush.h @@ -53,7 +53,7 @@ public: virtual ~AnyRtmpushCallback(void){}; virtual void OnRtmpConnected() = 0; - virtual void OnRrmpReconntecting(int times) = 0; + virtual void OnRtmpReconnecting(int times) = 0; virtual void OnRtmpDisconnect() = 0; virtual void OnRtmpStatusEvent(int delayMs, int netBand) = 0; }; @@ -66,6 +66,7 @@ public: void Close(); + void EnableOnlyAudioMode(); void SetAudioParameter(int samplerate/*44100*/, int pcmbitsize/*16*/, int channel/*1*/); void SetVideoParameter(int width, int height, int videodatarate, int framerate); @@ -88,6 +89,7 @@ private: AnyRtmpushCallback& callback_; bool running_; bool need_keyframe_; + bool only_audio_mode_; int retrys_; std::string str_url_; uint32_t stat_time_; diff --git a/AnyCore/plybuffer.cc b/AnyCore/plybuffer.cc index 18696d0e131889f57756c0c6b976b74e2ccb910c..ccb303bb295c1b8785087980d31ac7cedcf0b8d2 100644 --- a/AnyCore/plybuffer.cc +++ b/AnyCore/plybuffer.cc @@ -22,6 +22,7 @@ #define PLY_MIN_TIME 500 // 0.5s #define PLY_MAX_TIME 600000 // 10minute #define PLY_RED_TIME 250 // redundancy time +#define PLY_MAX_DELAY 1000 // 1 second #define PLY_MAX_CACHE 16 // 16s #define PB_TICK 1011 @@ -75,7 +76,6 @@ int PlyBuffer::GetPlayAudio(void* audioSamples) PlyPacket* pkt_front = lst_audio_buffer_.front(); ret = pkt_front->_data_len; play_cur_time_ = pkt_front->_dts; - //LOG(LS_ERROR) << "Audio ply time: " << play_cur_time_; memcpy(audioSamples, pkt_front->_data, pkt_front->_data_len); lst_audio_buffer_.pop_front(); delete pkt_front; @@ -103,6 +103,14 @@ void PlyBuffer::CachePcmData(const uint8_t*pdata, int len, uint32_t ts) rtc::CritScope cs(&cs_list_audio_); got_audio_ = true; lst_audio_buffer_.push_back(pkt); + if (sys_fast_video_time_ == 0) { + PlyPacket* pkt_front = lst_audio_buffer_.front(); + PlyPacket* pkt_back = lst_audio_buffer_.back(); + if ((pkt_back->_dts - pkt_front->_dts) >= PLY_MAX_DELAY) { + sys_fast_video_time_ = rtc::Time(); + rtmp_fast_video_time_ = ts; + } + } } void PlyBuffer::OnMessage(rtc::Message* msg) @@ -120,9 +128,6 @@ int PlyBuffer::GetCacheTime() void PlyBuffer::DoDecode() { - //* 拉流思路 - //* 1, Init status: 先解码视频帧(秒开), 音频先缓冲(规定时间)后再播放 - //* 2, Play status: 遇到下一个视频帧,清空所有未播放的视频帧,正常播放,时间轴按照音频的走 uint32_t curTime = rtc::Time(); if (sys_fast_video_time_ == 0) return; @@ -130,47 +135,6 @@ void PlyBuffer::DoDecode() PlyPacket* pkt = NULL; uint32_t videoSysGap = curTime - sys_fast_video_time_; uint32_t videoPlyTime = rtmp_fast_video_time_ + videoSysGap; -#if 0 - {//* Get video - rtc::CritScope cs(&cs_list_video_); - if (lst_video_buffer_.size() > 0) { - pkt = lst_video_buffer_.front(); - if (pkt->_dts <= videoPlyTime) { - lst_video_buffer_.pop_front(); - } - else { - pkt = NULL; - } - } - } - if (pkt != NULL) { - if (!callback_.OnNeedDecodeData(pkt)) { - delete pkt; - } - } - - if (videoSysGap >= PLY_RED_TIME) { - //* Start play audio - rtc::CritScope cs(&cs_list_audio_); - if (lst_audio_buffer_.size() > 0) { - PlyPacket* pkt_front = lst_audio_buffer_.front(); - PlyPacket* pkt_back = lst_audio_buffer_.back(); - while (lst_audio_buffer_.size() > 0) { - if ((pkt_back->_dts - pkt_front->_dts) > PLY_RED_TIME) { - lst_audio_buffer_.pop_front(); - delete pkt_front; - pkt_front = lst_audio_buffer_.front(); - } - else { - ply_status_ = PS_Normal; - play_cur_time_ = pkt_front->_dts; - callback_.OnPlay(); - break; - } - } - } - } -#else if (videoSysGap >= PLY_RED_TIME) { //* Start play a/v rtc::CritScope cs(&cs_list_audio_); @@ -184,7 +148,7 @@ void PlyBuffer::DoDecode() } } else { - if (videoSysGap >= PLY_RED_TIME*4) + if (videoSysGap >= PLY_RED_TIME * 4) { rtc::CritScope cs(&cs_list_video_); if (lst_video_buffer_.size() > 0) { @@ -196,7 +160,6 @@ void PlyBuffer::DoDecode() } } } -#endif } else if (ply_status_ == PS_Normal) { PlyPacket* pkt_video = NULL; @@ -246,9 +209,6 @@ void PlyBuffer::DoDecode() rtmp_cache_time_ = rtc::Time() + cache_time_; } buf_cache_time_ = media_buf_time; -// char buff[256]; -// sprintf(buff, "Audio buf time:%lu \r\n", media_buf_time); -// LOG(LS_ERROR) << buff; } else if (ply_status_ == PS_Cache) { if (rtmp_cache_time_ <= rtc::Time()) { diff --git a/AnyCore/srs_librtmp/srs_librtmp.cpp b/AnyCore/srs_librtmp/srs_librtmp.cpp index fc49e0b6460eb55cc97c1e00865c45de57d6c69f..4d4166ddfb9c843d40afbb83c6a177d5e5ce2d15 100644 --- a/AnyCore/srs_librtmp/srs_librtmp.cpp +++ b/AnyCore/srs_librtmp/srs_librtmp.cpp @@ -20799,6 +20799,11 @@ int srs_amf0_read_undefined(SrsStream* stream) } char marker = stream->read_1bytes(); + //* Add by Eric: for some FMLE Server response RTMP_AMF0_Null + if (marker == RTMP_AMF0_Null) { + return ret; + } + // end add if (marker != RTMP_AMF0_Undefined) { ret = ERROR_RTMP_AMF0_DECODE; srs_error("amf0 check undefined marker failed. " diff --git a/AnyRTC-RTMP.sln b/AnyRTC-RTMP.sln new file mode 100644 index 0000000000000000000000000000000000000000..49ad39efa13ec0866b148706e02a8d0a0a6d912d --- /dev/null +++ b/AnyRTC-RTMP.sln @@ -0,0 +1,253 @@ +锘 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rtc_base", "webrtc\base\rtc_base.vcxproj", "{93F855F4-EE6F-F00D-F4A3-35577B1D5F76}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rtc_base_approved", "webrtc\base\rtc_base_approved.vcxproj", "{510DEDDC-ED2F-0A3B-ABE1-F7F1E6D75CF8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libyuv", "third_party\libyuv\libyuv.vcxproj", "{E4505A22-7591-FEDF-6B9F-4FF8AB727FF9}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "audio_device", "webrtc\modules\audio_device.vcxproj", "{E7E494C8-F0D0-4376-4006-C691BB4233EF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "system_wrappers", "webrtc\system_wrappers\system_wrappers.vcxproj", "{16FE3FD5-AA01-BD2A-2BFF-7785FFEDEDEC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "webrtc_common", "webrtc\webrtc_common.vcxproj", "{4E00D9E2-1F74-8D2E-1878-DCFE215138F5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common_audio", "webrtc\common_audio\common_audio.vcxproj", "{39FE2BB0-C2E7-DB9C-D514-19B221F3CA00}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common_audio_sse2", "webrtc\common_audio\common_audio_sse2.vcxproj", "{B6B37B26-252C-247D-DBA3-D03511AC9509}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "codec", "codec", "{8BDD5CFB-AD01-492F-99C0-E7E9B07B372C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libfaac_dll", "third_party\faac-1.28\libfaac\libfaac_dll.vcxproj", "{856BB8CF-B944-4D7A-9D59-4945316229AA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libfaad2_dll", "third_party\faad2-2.7\libfaad\libfaad2_dll.vcxproj", "{482DA264-EE88-4575-B208-87C4CB80CD08}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "audio_coding_module", "webrtc\modules\audio_coding_module.vcxproj", "{1DEAC0D1-003D-95F6-6693-EF0F1A5C733A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "rtc", "rtc", "{47C1F596-3D0B-4265-B4D1-5F287CEA6D6A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "webrtc_h264", "webrtc\modules\webrtc_h264.vcxproj", "{C93CB6A3-741A-2433-10D3-FC2CE462281B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rtc_media", "webrtc\media\rtc_media.vcxproj", "{CC4CC1BB-4534-3322-5D30-6F7B749E7CDE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common_video", "webrtc\common_video\common_video.vcxproj", "{AC613F26-3B4F-2DF0-F78C-52B6D0770C2D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "metrics_default", "webrtc\system_wrappers\metrics_default.vcxproj", "{5569B280-3A89-5837-BD37-C3A976C6F597}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AnyCore", "AnyCore\AnyCore.vcxproj", "{2E1012CB-6F96-4444-A4F8-F932F8421D34}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "video_coding_utility", "webrtc\modules\video_coding\utility\video_coding_utility.vcxproj", "{E3CC8540-9E4F-66F9-D430-EFDAE52DEDAC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LiveWin32", "Prj-Win\LiveWin32.vcxproj", "{2F1E6265-95FC-4B51-A28E-F4EE8B5C579C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Win32Render", "VideoRender\win32_render.vcxproj", "{1AD2B7CF-C61C-43CD-8A27-4C52EF9CC5D3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "video_capture_module", "webrtc\modules\video_capture_module.vcxproj", "{BD794CBA-B6AC-1A8F-784E-89F56FDA8B8D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "video_capture_module_internal_impl", "webrtc\modules\video_capture_module_internal_impl.vcxproj", "{58C4E66E-F613-82E0-C039-7A453BCAC1E4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "directshow_baseclasses", "third_party\winsdk_samples\directshow_baseclasses.vcxproj", "{B49DE8DD-F78D-F7CF-052D-8F9AED62D088}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {93F855F4-EE6F-F00D-F4A3-35577B1D5F76}.Debug|Win32.ActiveCfg = Debug|Win32 + {93F855F4-EE6F-F00D-F4A3-35577B1D5F76}.Debug|Win32.Build.0 = Debug|Win32 + {93F855F4-EE6F-F00D-F4A3-35577B1D5F76}.Debug|x64.ActiveCfg = Debug|x64 + {93F855F4-EE6F-F00D-F4A3-35577B1D5F76}.Debug|x64.Build.0 = Debug|x64 + {93F855F4-EE6F-F00D-F4A3-35577B1D5F76}.Release|Win32.ActiveCfg = Release|Win32 + {93F855F4-EE6F-F00D-F4A3-35577B1D5F76}.Release|Win32.Build.0 = Release|Win32 + {93F855F4-EE6F-F00D-F4A3-35577B1D5F76}.Release|x64.ActiveCfg = Release|x64 + {93F855F4-EE6F-F00D-F4A3-35577B1D5F76}.Release|x64.Build.0 = Release|x64 + {510DEDDC-ED2F-0A3B-ABE1-F7F1E6D75CF8}.Debug|Win32.ActiveCfg = Debug|Win32 + {510DEDDC-ED2F-0A3B-ABE1-F7F1E6D75CF8}.Debug|Win32.Build.0 = Debug|Win32 + {510DEDDC-ED2F-0A3B-ABE1-F7F1E6D75CF8}.Debug|x64.ActiveCfg = Debug|x64 + {510DEDDC-ED2F-0A3B-ABE1-F7F1E6D75CF8}.Debug|x64.Build.0 = Debug|x64 + {510DEDDC-ED2F-0A3B-ABE1-F7F1E6D75CF8}.Release|Win32.ActiveCfg = Release|Win32 + {510DEDDC-ED2F-0A3B-ABE1-F7F1E6D75CF8}.Release|Win32.Build.0 = Release|Win32 + {510DEDDC-ED2F-0A3B-ABE1-F7F1E6D75CF8}.Release|x64.ActiveCfg = Release|x64 + {510DEDDC-ED2F-0A3B-ABE1-F7F1E6D75CF8}.Release|x64.Build.0 = Release|x64 + {E4505A22-7591-FEDF-6B9F-4FF8AB727FF9}.Debug|Win32.ActiveCfg = Debug|Win32 + {E4505A22-7591-FEDF-6B9F-4FF8AB727FF9}.Debug|Win32.Build.0 = Debug|Win32 + {E4505A22-7591-FEDF-6B9F-4FF8AB727FF9}.Debug|x64.ActiveCfg = Debug|x64 + {E4505A22-7591-FEDF-6B9F-4FF8AB727FF9}.Debug|x64.Build.0 = Debug|x64 + {E4505A22-7591-FEDF-6B9F-4FF8AB727FF9}.Release|Win32.ActiveCfg = Release|Win32 + {E4505A22-7591-FEDF-6B9F-4FF8AB727FF9}.Release|Win32.Build.0 = Release|Win32 + {E4505A22-7591-FEDF-6B9F-4FF8AB727FF9}.Release|x64.ActiveCfg = Release|x64 + {E4505A22-7591-FEDF-6B9F-4FF8AB727FF9}.Release|x64.Build.0 = Release|x64 + {E7E494C8-F0D0-4376-4006-C691BB4233EF}.Debug|Win32.ActiveCfg = Debug|Win32 + {E7E494C8-F0D0-4376-4006-C691BB4233EF}.Debug|Win32.Build.0 = Debug|Win32 + {E7E494C8-F0D0-4376-4006-C691BB4233EF}.Debug|x64.ActiveCfg = Debug|x64 + {E7E494C8-F0D0-4376-4006-C691BB4233EF}.Debug|x64.Build.0 = Debug|x64 + {E7E494C8-F0D0-4376-4006-C691BB4233EF}.Release|Win32.ActiveCfg = Release|Win32 + {E7E494C8-F0D0-4376-4006-C691BB4233EF}.Release|Win32.Build.0 = Release|Win32 + {E7E494C8-F0D0-4376-4006-C691BB4233EF}.Release|x64.ActiveCfg = Release|x64 + {E7E494C8-F0D0-4376-4006-C691BB4233EF}.Release|x64.Build.0 = Release|x64 + {16FE3FD5-AA01-BD2A-2BFF-7785FFEDEDEC}.Debug|Win32.ActiveCfg = Debug|Win32 + {16FE3FD5-AA01-BD2A-2BFF-7785FFEDEDEC}.Debug|Win32.Build.0 = Debug|Win32 + {16FE3FD5-AA01-BD2A-2BFF-7785FFEDEDEC}.Debug|x64.ActiveCfg = Debug|x64 + {16FE3FD5-AA01-BD2A-2BFF-7785FFEDEDEC}.Debug|x64.Build.0 = Debug|x64 + {16FE3FD5-AA01-BD2A-2BFF-7785FFEDEDEC}.Release|Win32.ActiveCfg = Release|Win32 + {16FE3FD5-AA01-BD2A-2BFF-7785FFEDEDEC}.Release|Win32.Build.0 = Release|Win32 + {16FE3FD5-AA01-BD2A-2BFF-7785FFEDEDEC}.Release|x64.ActiveCfg = Release|x64 + {16FE3FD5-AA01-BD2A-2BFF-7785FFEDEDEC}.Release|x64.Build.0 = Release|x64 + {4E00D9E2-1F74-8D2E-1878-DCFE215138F5}.Debug|Win32.ActiveCfg = Debug|Win32 + {4E00D9E2-1F74-8D2E-1878-DCFE215138F5}.Debug|Win32.Build.0 = Debug|Win32 + {4E00D9E2-1F74-8D2E-1878-DCFE215138F5}.Debug|x64.ActiveCfg = Debug|x64 + {4E00D9E2-1F74-8D2E-1878-DCFE215138F5}.Debug|x64.Build.0 = Debug|x64 + {4E00D9E2-1F74-8D2E-1878-DCFE215138F5}.Release|Win32.ActiveCfg = Release|Win32 + {4E00D9E2-1F74-8D2E-1878-DCFE215138F5}.Release|Win32.Build.0 = Release|Win32 + {4E00D9E2-1F74-8D2E-1878-DCFE215138F5}.Release|x64.ActiveCfg = Release|x64 + {4E00D9E2-1F74-8D2E-1878-DCFE215138F5}.Release|x64.Build.0 = Release|x64 + {39FE2BB0-C2E7-DB9C-D514-19B221F3CA00}.Debug|Win32.ActiveCfg = Debug|Win32 + {39FE2BB0-C2E7-DB9C-D514-19B221F3CA00}.Debug|Win32.Build.0 = Debug|Win32 + {39FE2BB0-C2E7-DB9C-D514-19B221F3CA00}.Debug|x64.ActiveCfg = Debug|x64 + {39FE2BB0-C2E7-DB9C-D514-19B221F3CA00}.Debug|x64.Build.0 = Debug|x64 + {39FE2BB0-C2E7-DB9C-D514-19B221F3CA00}.Release|Win32.ActiveCfg = Release|Win32 + {39FE2BB0-C2E7-DB9C-D514-19B221F3CA00}.Release|Win32.Build.0 = Release|Win32 + {39FE2BB0-C2E7-DB9C-D514-19B221F3CA00}.Release|x64.ActiveCfg = Release|x64 + {39FE2BB0-C2E7-DB9C-D514-19B221F3CA00}.Release|x64.Build.0 = Release|x64 + {B6B37B26-252C-247D-DBA3-D03511AC9509}.Debug|Win32.ActiveCfg = Debug|Win32 + {B6B37B26-252C-247D-DBA3-D03511AC9509}.Debug|Win32.Build.0 = Debug|Win32 + {B6B37B26-252C-247D-DBA3-D03511AC9509}.Debug|x64.ActiveCfg = Debug|x64 + {B6B37B26-252C-247D-DBA3-D03511AC9509}.Debug|x64.Build.0 = Debug|x64 + {B6B37B26-252C-247D-DBA3-D03511AC9509}.Release|Win32.ActiveCfg = Release|Win32 + {B6B37B26-252C-247D-DBA3-D03511AC9509}.Release|Win32.Build.0 = Release|Win32 + {B6B37B26-252C-247D-DBA3-D03511AC9509}.Release|x64.ActiveCfg = Release|x64 + {B6B37B26-252C-247D-DBA3-D03511AC9509}.Release|x64.Build.0 = Release|x64 + {856BB8CF-B944-4D7A-9D59-4945316229AA}.Debug|Win32.ActiveCfg = Debug|Win32 + {856BB8CF-B944-4D7A-9D59-4945316229AA}.Debug|Win32.Build.0 = Debug|Win32 + {856BB8CF-B944-4D7A-9D59-4945316229AA}.Debug|x64.ActiveCfg = Debug|Win32 + {856BB8CF-B944-4D7A-9D59-4945316229AA}.Release|Win32.ActiveCfg = Release|Win32 + {856BB8CF-B944-4D7A-9D59-4945316229AA}.Release|Win32.Build.0 = Release|Win32 + {856BB8CF-B944-4D7A-9D59-4945316229AA}.Release|x64.ActiveCfg = Release|Win32 + {482DA264-EE88-4575-B208-87C4CB80CD08}.Debug|Win32.ActiveCfg = Debug|Win32 + {482DA264-EE88-4575-B208-87C4CB80CD08}.Debug|Win32.Build.0 = Debug|Win32 + {482DA264-EE88-4575-B208-87C4CB80CD08}.Debug|x64.ActiveCfg = Debug|Win32 + {482DA264-EE88-4575-B208-87C4CB80CD08}.Release|Win32.ActiveCfg = Release|Win32 + {482DA264-EE88-4575-B208-87C4CB80CD08}.Release|Win32.Build.0 = Release|Win32 + {482DA264-EE88-4575-B208-87C4CB80CD08}.Release|x64.ActiveCfg = Release|Win32 + {1DEAC0D1-003D-95F6-6693-EF0F1A5C733A}.Debug|Win32.ActiveCfg = Debug|Win32 + {1DEAC0D1-003D-95F6-6693-EF0F1A5C733A}.Debug|Win32.Build.0 = Debug|Win32 + {1DEAC0D1-003D-95F6-6693-EF0F1A5C733A}.Debug|x64.ActiveCfg = Debug|x64 + {1DEAC0D1-003D-95F6-6693-EF0F1A5C733A}.Debug|x64.Build.0 = Debug|x64 + {1DEAC0D1-003D-95F6-6693-EF0F1A5C733A}.Release|Win32.ActiveCfg = Release|Win32 + {1DEAC0D1-003D-95F6-6693-EF0F1A5C733A}.Release|Win32.Build.0 = Release|Win32 + {1DEAC0D1-003D-95F6-6693-EF0F1A5C733A}.Release|x64.ActiveCfg = Release|x64 + {1DEAC0D1-003D-95F6-6693-EF0F1A5C733A}.Release|x64.Build.0 = Release|x64 + {C93CB6A3-741A-2433-10D3-FC2CE462281B}.Debug|Win32.ActiveCfg = Debug|Win32 + {C93CB6A3-741A-2433-10D3-FC2CE462281B}.Debug|Win32.Build.0 = Debug|Win32 + {C93CB6A3-741A-2433-10D3-FC2CE462281B}.Debug|x64.ActiveCfg = Debug|x64 + {C93CB6A3-741A-2433-10D3-FC2CE462281B}.Debug|x64.Build.0 = Debug|x64 + {C93CB6A3-741A-2433-10D3-FC2CE462281B}.Release|Win32.ActiveCfg = Release|Win32 + {C93CB6A3-741A-2433-10D3-FC2CE462281B}.Release|Win32.Build.0 = Release|Win32 + {C93CB6A3-741A-2433-10D3-FC2CE462281B}.Release|x64.ActiveCfg = Release|x64 + {C93CB6A3-741A-2433-10D3-FC2CE462281B}.Release|x64.Build.0 = Release|x64 + {CC4CC1BB-4534-3322-5D30-6F7B749E7CDE}.Debug|Win32.ActiveCfg = Debug|Win32 + {CC4CC1BB-4534-3322-5D30-6F7B749E7CDE}.Debug|Win32.Build.0 = Debug|Win32 + {CC4CC1BB-4534-3322-5D30-6F7B749E7CDE}.Debug|x64.ActiveCfg = Debug|x64 + {CC4CC1BB-4534-3322-5D30-6F7B749E7CDE}.Debug|x64.Build.0 = Debug|x64 + {CC4CC1BB-4534-3322-5D30-6F7B749E7CDE}.Release|Win32.ActiveCfg = Release|Win32 + {CC4CC1BB-4534-3322-5D30-6F7B749E7CDE}.Release|Win32.Build.0 = Release|Win32 + {CC4CC1BB-4534-3322-5D30-6F7B749E7CDE}.Release|x64.ActiveCfg = Release|x64 + {CC4CC1BB-4534-3322-5D30-6F7B749E7CDE}.Release|x64.Build.0 = Release|x64 + {AC613F26-3B4F-2DF0-F78C-52B6D0770C2D}.Debug|Win32.ActiveCfg = Debug|Win32 + {AC613F26-3B4F-2DF0-F78C-52B6D0770C2D}.Debug|Win32.Build.0 = Debug|Win32 + {AC613F26-3B4F-2DF0-F78C-52B6D0770C2D}.Debug|x64.ActiveCfg = Debug|x64 + {AC613F26-3B4F-2DF0-F78C-52B6D0770C2D}.Debug|x64.Build.0 = Debug|x64 + {AC613F26-3B4F-2DF0-F78C-52B6D0770C2D}.Release|Win32.ActiveCfg = Release|Win32 + {AC613F26-3B4F-2DF0-F78C-52B6D0770C2D}.Release|Win32.Build.0 = Release|Win32 + {AC613F26-3B4F-2DF0-F78C-52B6D0770C2D}.Release|x64.ActiveCfg = Release|x64 + {AC613F26-3B4F-2DF0-F78C-52B6D0770C2D}.Release|x64.Build.0 = Release|x64 + {5569B280-3A89-5837-BD37-C3A976C6F597}.Debug|Win32.ActiveCfg = Debug|Win32 + {5569B280-3A89-5837-BD37-C3A976C6F597}.Debug|Win32.Build.0 = Debug|Win32 + {5569B280-3A89-5837-BD37-C3A976C6F597}.Debug|x64.ActiveCfg = Debug|x64 + {5569B280-3A89-5837-BD37-C3A976C6F597}.Debug|x64.Build.0 = Debug|x64 + {5569B280-3A89-5837-BD37-C3A976C6F597}.Release|Win32.ActiveCfg = Release|Win32 + {5569B280-3A89-5837-BD37-C3A976C6F597}.Release|Win32.Build.0 = Release|Win32 + {5569B280-3A89-5837-BD37-C3A976C6F597}.Release|x64.ActiveCfg = Release|x64 + {5569B280-3A89-5837-BD37-C3A976C6F597}.Release|x64.Build.0 = Release|x64 + {2E1012CB-6F96-4444-A4F8-F932F8421D34}.Debug|Win32.ActiveCfg = Debug|Win32 + {2E1012CB-6F96-4444-A4F8-F932F8421D34}.Debug|Win32.Build.0 = Debug|Win32 + {2E1012CB-6F96-4444-A4F8-F932F8421D34}.Debug|x64.ActiveCfg = Debug|Win32 + {2E1012CB-6F96-4444-A4F8-F932F8421D34}.Release|Win32.ActiveCfg = Release|Win32 + {2E1012CB-6F96-4444-A4F8-F932F8421D34}.Release|Win32.Build.0 = Release|Win32 + {2E1012CB-6F96-4444-A4F8-F932F8421D34}.Release|x64.ActiveCfg = Release|Win32 + {E3CC8540-9E4F-66F9-D430-EFDAE52DEDAC}.Debug|Win32.ActiveCfg = Debug|Win32 + {E3CC8540-9E4F-66F9-D430-EFDAE52DEDAC}.Debug|Win32.Build.0 = Debug|Win32 + {E3CC8540-9E4F-66F9-D430-EFDAE52DEDAC}.Debug|x64.ActiveCfg = Debug|x64 + {E3CC8540-9E4F-66F9-D430-EFDAE52DEDAC}.Debug|x64.Build.0 = Debug|x64 + {E3CC8540-9E4F-66F9-D430-EFDAE52DEDAC}.Release|Win32.ActiveCfg = Release|Win32 + {E3CC8540-9E4F-66F9-D430-EFDAE52DEDAC}.Release|Win32.Build.0 = Release|Win32 + {E3CC8540-9E4F-66F9-D430-EFDAE52DEDAC}.Release|x64.ActiveCfg = Release|x64 + {E3CC8540-9E4F-66F9-D430-EFDAE52DEDAC}.Release|x64.Build.0 = Release|x64 + {2F1E6265-95FC-4B51-A28E-F4EE8B5C579C}.Debug|Win32.ActiveCfg = Debug|Win32 + {2F1E6265-95FC-4B51-A28E-F4EE8B5C579C}.Debug|Win32.Build.0 = Debug|Win32 + {2F1E6265-95FC-4B51-A28E-F4EE8B5C579C}.Debug|x64.ActiveCfg = Debug|Win32 + {2F1E6265-95FC-4B51-A28E-F4EE8B5C579C}.Release|Win32.ActiveCfg = Release|Win32 + {2F1E6265-95FC-4B51-A28E-F4EE8B5C579C}.Release|Win32.Build.0 = Release|Win32 + {2F1E6265-95FC-4B51-A28E-F4EE8B5C579C}.Release|x64.ActiveCfg = Release|Win32 + {1AD2B7CF-C61C-43CD-8A27-4C52EF9CC5D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {1AD2B7CF-C61C-43CD-8A27-4C52EF9CC5D3}.Debug|Win32.Build.0 = Debug|Win32 + {1AD2B7CF-C61C-43CD-8A27-4C52EF9CC5D3}.Debug|x64.ActiveCfg = Debug|Win32 + {1AD2B7CF-C61C-43CD-8A27-4C52EF9CC5D3}.Release|Win32.ActiveCfg = Release|Win32 + {1AD2B7CF-C61C-43CD-8A27-4C52EF9CC5D3}.Release|Win32.Build.0 = Release|Win32 + {1AD2B7CF-C61C-43CD-8A27-4C52EF9CC5D3}.Release|x64.ActiveCfg = Release|Win32 + {BD794CBA-B6AC-1A8F-784E-89F56FDA8B8D}.Debug|Win32.ActiveCfg = Debug|Win32 + {BD794CBA-B6AC-1A8F-784E-89F56FDA8B8D}.Debug|Win32.Build.0 = Debug|Win32 + {BD794CBA-B6AC-1A8F-784E-89F56FDA8B8D}.Debug|x64.ActiveCfg = Debug|x64 + {BD794CBA-B6AC-1A8F-784E-89F56FDA8B8D}.Debug|x64.Build.0 = Debug|x64 + {BD794CBA-B6AC-1A8F-784E-89F56FDA8B8D}.Release|Win32.ActiveCfg = Release|Win32 + {BD794CBA-B6AC-1A8F-784E-89F56FDA8B8D}.Release|Win32.Build.0 = Release|Win32 + {BD794CBA-B6AC-1A8F-784E-89F56FDA8B8D}.Release|x64.ActiveCfg = Release|x64 + {BD794CBA-B6AC-1A8F-784E-89F56FDA8B8D}.Release|x64.Build.0 = Release|x64 + {58C4E66E-F613-82E0-C039-7A453BCAC1E4}.Debug|Win32.ActiveCfg = Debug|Win32 + {58C4E66E-F613-82E0-C039-7A453BCAC1E4}.Debug|Win32.Build.0 = Debug|Win32 + {58C4E66E-F613-82E0-C039-7A453BCAC1E4}.Debug|x64.ActiveCfg = Debug|x64 + {58C4E66E-F613-82E0-C039-7A453BCAC1E4}.Debug|x64.Build.0 = Debug|x64 + {58C4E66E-F613-82E0-C039-7A453BCAC1E4}.Release|Win32.ActiveCfg = Release|Win32 + {58C4E66E-F613-82E0-C039-7A453BCAC1E4}.Release|Win32.Build.0 = Release|Win32 + {58C4E66E-F613-82E0-C039-7A453BCAC1E4}.Release|x64.ActiveCfg = Release|x64 + {58C4E66E-F613-82E0-C039-7A453BCAC1E4}.Release|x64.Build.0 = Release|x64 + {B49DE8DD-F78D-F7CF-052D-8F9AED62D088}.Debug|Win32.ActiveCfg = Debug|Win32 + {B49DE8DD-F78D-F7CF-052D-8F9AED62D088}.Debug|Win32.Build.0 = Debug|Win32 + {B49DE8DD-F78D-F7CF-052D-8F9AED62D088}.Debug|x64.ActiveCfg = Debug|x64 + {B49DE8DD-F78D-F7CF-052D-8F9AED62D088}.Debug|x64.Build.0 = Debug|x64 + {B49DE8DD-F78D-F7CF-052D-8F9AED62D088}.Release|Win32.ActiveCfg = Release|Win32 + {B49DE8DD-F78D-F7CF-052D-8F9AED62D088}.Release|Win32.Build.0 = Release|Win32 + {B49DE8DD-F78D-F7CF-052D-8F9AED62D088}.Release|x64.ActiveCfg = Release|x64 + {B49DE8DD-F78D-F7CF-052D-8F9AED62D088}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {93F855F4-EE6F-F00D-F4A3-35577B1D5F76} = {47C1F596-3D0B-4265-B4D1-5F287CEA6D6A} + {510DEDDC-ED2F-0A3B-ABE1-F7F1E6D75CF8} = {47C1F596-3D0B-4265-B4D1-5F287CEA6D6A} + {E4505A22-7591-FEDF-6B9F-4FF8AB727FF9} = {8BDD5CFB-AD01-492F-99C0-E7E9B07B372C} + {E7E494C8-F0D0-4376-4006-C691BB4233EF} = {47C1F596-3D0B-4265-B4D1-5F287CEA6D6A} + {16FE3FD5-AA01-BD2A-2BFF-7785FFEDEDEC} = {47C1F596-3D0B-4265-B4D1-5F287CEA6D6A} + {4E00D9E2-1F74-8D2E-1878-DCFE215138F5} = {47C1F596-3D0B-4265-B4D1-5F287CEA6D6A} + {39FE2BB0-C2E7-DB9C-D514-19B221F3CA00} = {47C1F596-3D0B-4265-B4D1-5F287CEA6D6A} + {B6B37B26-252C-247D-DBA3-D03511AC9509} = {47C1F596-3D0B-4265-B4D1-5F287CEA6D6A} + {856BB8CF-B944-4D7A-9D59-4945316229AA} = {8BDD5CFB-AD01-492F-99C0-E7E9B07B372C} + {482DA264-EE88-4575-B208-87C4CB80CD08} = {8BDD5CFB-AD01-492F-99C0-E7E9B07B372C} + {1DEAC0D1-003D-95F6-6693-EF0F1A5C733A} = {47C1F596-3D0B-4265-B4D1-5F287CEA6D6A} + {C93CB6A3-741A-2433-10D3-FC2CE462281B} = {47C1F596-3D0B-4265-B4D1-5F287CEA6D6A} + {CC4CC1BB-4534-3322-5D30-6F7B749E7CDE} = {47C1F596-3D0B-4265-B4D1-5F287CEA6D6A} + {AC613F26-3B4F-2DF0-F78C-52B6D0770C2D} = {47C1F596-3D0B-4265-B4D1-5F287CEA6D6A} + {5569B280-3A89-5837-BD37-C3A976C6F597} = {47C1F596-3D0B-4265-B4D1-5F287CEA6D6A} + {E3CC8540-9E4F-66F9-D430-EFDAE52DEDAC} = {47C1F596-3D0B-4265-B4D1-5F287CEA6D6A} + {BD794CBA-B6AC-1A8F-784E-89F56FDA8B8D} = {47C1F596-3D0B-4265-B4D1-5F287CEA6D6A} + {58C4E66E-F613-82E0-C039-7A453BCAC1E4} = {47C1F596-3D0B-4265-B4D1-5F287CEA6D6A} + {B49DE8DD-F78D-F7CF-052D-8F9AED62D088} = {47C1F596-3D0B-4265-B4D1-5F287CEA6D6A} + EndGlobalSection +EndGlobal diff --git a/Prj-Android/app/src/main/java/org/anyrtc/anyrtmp/GuestActivity.java b/Prj-Android/app/src/main/java/org/anyrtc/anyrtmp/GuestActivity.java index 1c5ff0bad83b9d73b1db797bacc48892b67d4d6a..713163ced8de896e0e1aa8dad1b08a9bf054b7ab 100644 --- a/Prj-Android/app/src/main/java/org/anyrtc/anyrtmp/GuestActivity.java +++ b/Prj-Android/app/src/main/java/org/anyrtc/anyrtmp/GuestActivity.java @@ -1,7 +1,26 @@ +/** + * Copyright (c) 2016 The AnyRTC project authors. All Rights Reserved. + * + * Please visit https://www.anyrtc.io for detail. + * + * The GNU General Public License is a free, copyleft license for + * software and other kinds of works. + * + * The licenses for most software and other practical works are designed + * to take away your freedom to share and change the works. By contrast, + * the GNU General Public License is intended to guarantee your freedom to + * share and change all versions of a program--to make sure it remains free + * software for all its users. We, the Free Software Foundation, use the + * GNU General Public License for most of our software; it applies also to + * any other work released this way by its authors. You can apply it to + * your programs, too. + * See the GNU LICENSE file for more info. + */ package org.anyrtc.anyrtmp; import android.app.Activity; import android.os.Bundle; +import android.view.View; import android.widget.TextView; import org.anyrtc.core.AnyRTMP; @@ -19,6 +38,7 @@ public class GuestActivity extends Activity implements RTMPGuestHelper { private TextView mTxtStatus = null; private SurfaceViewRenderer mSurfaceView = null; private VideoRenderer mRenderer = null; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -42,13 +62,28 @@ public class GuestActivity extends Activity implements RTMPGuestHelper { protected void onDestroy() { super.onDestroy(); - if(mGuest != null) { + if (mGuest != null) { mGuest.StopRtmpPlay(); mGuest.Clear(); mGuest = null; } } + /** + * the button click event listener + * + * @param btn + */ + public void OnBtnClicked(View btn) { + if (btn.getId() == R.id.btn_close) { + if (mGuest != null) { + mGuest.StopRtmpPlay(); + mGuest.Clear(); + mGuest = null; + } + finish(); + } + } /** * Implements for RTMPGuestHelper @@ -58,7 +93,7 @@ public class GuestActivity extends Activity implements RTMPGuestHelper { runOnUiThread(new Runnable() { @Override public void run() { - mTxtStatus.setText("RTMP play OK!"); + mTxtStatus.setText(R.string.str_rtmp_play_success); } }); } @@ -68,7 +103,7 @@ public class GuestActivity extends Activity implements RTMPGuestHelper { runOnUiThread(new Runnable() { @Override public void run() { - mTxtStatus.setText(String.format("RTMP Cache(%d) network(%d)", cacheTime, curBitrate)); + mTxtStatus.setText(String.format(getString(R.string.str_rtmp_pull_status), cacheTime, curBitrate)); } }); } @@ -87,7 +122,7 @@ public class GuestActivity extends Activity implements RTMPGuestHelper { runOnUiThread(new Runnable() { @Override public void run() { - mTxtStatus.setText("RTMP"); + mTxtStatus.setText(R.string.str_rtmp); } }); } diff --git a/Prj-Android/app/src/main/java/org/anyrtc/anyrtmp/HosterActivity.java b/Prj-Android/app/src/main/java/org/anyrtc/anyrtmp/HosterActivity.java index 31101d4e3ba5d3ea062aba335784dcd4596e5ade..54eb6a24533d8a653358ac6213fa1e0baed1dff1 100644 --- a/Prj-Android/app/src/main/java/org/anyrtc/anyrtmp/HosterActivity.java +++ b/Prj-Android/app/src/main/java/org/anyrtc/anyrtmp/HosterActivity.java @@ -1,7 +1,27 @@ +/** + * Copyright (c) 2016 The AnyRTC project authors. All Rights Reserved. + * + * Please visit https://www.anyrtc.io for detail. + * + * The GNU General Public License is a free, copyleft license for + * software and other kinds of works. + * + * The licenses for most software and other practical works are designed + * to take away your freedom to share and change the works. By contrast, + * the GNU General Public License is intended to guarantee your freedom to + * share and change all versions of a program--to make sure it remains free + * software for all its users. We, the Free Software Foundation, use the + * GNU General Public License for most of our software; it applies also to + * any other work released this way by its authors. You can apply it to + * your programs, too. + * See the GNU LICENSE file for more info. + */ package org.anyrtc.anyrtmp; import android.app.Activity; import android.os.Bundle; +import android.text.SpannableString; +import android.view.View; import android.widget.TextView; import org.anyrtc.core.AnyRTMP; @@ -44,13 +64,33 @@ public class HosterActivity extends Activity implements RTMPHosterHelper { protected void onDestroy() { super.onDestroy(); - if(mHoster != null) { + if (mHoster != null) { mHoster.StopRtmpStream(); mHoster.Clear(); mHoster = null; } } + /** + * the button click event listener + * + * @param btn + */ + public void OnBtnClicked(View btn) { + if (btn.getId() == R.id.btn_close) { + if (mHoster != null) { + mHoster.StopRtmpStream(); + mHoster.Clear(); + mHoster = null; + } + finish(); + } else if (btn.getId() == R.id.btn_switch_camera) { + if (null != mHoster) { + mHoster.SwitchCamera(); + } + } + } + /** * Implements for RTMPHosterHelper @@ -60,7 +100,7 @@ public class HosterActivity extends Activity implements RTMPHosterHelper { runOnUiThread(new Runnable() { @Override public void run() { - mTxtStatus.setText("RTMP Connect OK!"); + mTxtStatus.setText(R.string.str_rtmp_success); } }); } @@ -70,7 +110,7 @@ public class HosterActivity extends Activity implements RTMPHosterHelper { runOnUiThread(new Runnable() { @Override public void run() { - mTxtStatus.setText(String.format("RTMP Reconnecting(%s)...", times)); + mTxtStatus.setText(String.format(getString(R.string.str_rtmp_reconnecting), times)); } }); } @@ -80,7 +120,7 @@ public class HosterActivity extends Activity implements RTMPHosterHelper { runOnUiThread(new Runnable() { @Override public void run() { - mTxtStatus.setText(String.format("RTMP Delay(%d) network(%d)", delayMs, netBand)); + mTxtStatus.setText(String.format(getString(R.string.str_rtmp_status), delayMs, netBand)); } }); } @@ -90,7 +130,7 @@ public class HosterActivity extends Activity implements RTMPHosterHelper { runOnUiThread(new Runnable() { @Override public void run() { - mTxtStatus.setText("RTMP Connect Failed!"); + mTxtStatus.setText(R.string.str_rtmp_failed); } }); } @@ -100,7 +140,7 @@ public class HosterActivity extends Activity implements RTMPHosterHelper { runOnUiThread(new Runnable() { @Override public void run() { - mTxtStatus.setText("RTMP"); + mTxtStatus.setText(R.string.str_rtmp); } }); } diff --git a/Prj-Android/app/src/main/java/org/anyrtc/anyrtmp/MainActivity.java b/Prj-Android/app/src/main/java/org/anyrtc/anyrtmp/MainActivity.java index ac124ed0de33393fbb07964509abf886afea395b..1a5cf24d6b009255c0fb7864f703243cb8042a45 100644 --- a/Prj-Android/app/src/main/java/org/anyrtc/anyrtmp/MainActivity.java +++ b/Prj-Android/app/src/main/java/org/anyrtc/anyrtmp/MainActivity.java @@ -1,3 +1,21 @@ +/** +* Copyright (c) 2016 The AnyRTC project authors. All Rights Reserved. +* +* Please visit https://www.anyrtc.io for detail. +* +* The GNU General Public License is a free, copyleft license for +* software and other kinds of works. +* +* The licenses for most software and other practical works are designed +* to take away your freedom to share and change the works. By contrast, +* the GNU General Public License is intended to guarantee your freedom to +* share and change all versions of a program--to make sure it remains free +* software for all its users. We, the Free Software Foundation, use the +* GNU General Public License for most of our software; it applies also to +* any other work released this way by its authors. You can apply it to +* your programs, too. +* See the GNU LICENSE file for more info. +*/ package org.anyrtc.anyrtmp; import android.content.Intent; @@ -25,7 +43,7 @@ public class MainActivity extends AppCompatActivity { public void OnBtnClicked(View view) { String rtmpUrl = mEditRtmpUrl.getEditableText().toString(); - if(rtmpUrl.length() == 0) { + if (rtmpUrl.length() == 0) { return; } if (view.getId() == R.id.btn_start_live) { diff --git a/Prj-Android/app/src/main/java/org/anyrtc/core/AnyRTMP.java b/Prj-Android/app/src/main/java/org/anyrtc/core/AnyRTMP.java index b15646f4c918b42940bc8016e2120a58c3bfd429..806988029f14a778a05470686d05619c653ef60c 100644 --- a/Prj-Android/app/src/main/java/org/anyrtc/core/AnyRTMP.java +++ b/Prj-Android/app/src/main/java/org/anyrtc/core/AnyRTMP.java @@ -1,3 +1,21 @@ +/** + * Copyright (c) 2016 The AnyRTC project authors. All Rights Reserved. + * + * Please visit https://www.anyrtc.io for detail. + * + * The GNU General Public License is a free, copyleft license for + * software and other kinds of works. + * + * The licenses for most software and other practical works are designed + * to take away your freedom to share and change the works. By contrast, + * the GNU General Public License is intended to guarantee your freedom to + * share and change all versions of a program--to make sure it remains free + * software for all its users. We, the Free Software Foundation, use the + * GNU General Public License for most of our software; it applies also to + * any other work released this way by its authors. You can apply it to + * your programs, too. + * See the GNU LICENSE file for more info. + */ package org.anyrtc.core; import android.content.Context; @@ -55,6 +73,7 @@ public class AnyRTMP { public void dispose() { executor.requestStop(); } + /** * Jni interface */ diff --git a/Prj-Android/app/src/main/java/org/anyrtc/core/LooperExecutor.java b/Prj-Android/app/src/main/java/org/anyrtc/core/LooperExecutor.java index 52b56ab15b679d573ef97996f47f7424cb0d6dce..43ba41e179fe93c0aaeccad964e8659e39ac3558 100644 --- a/Prj-Android/app/src/main/java/org/anyrtc/core/LooperExecutor.java +++ b/Prj-Android/app/src/main/java/org/anyrtc/core/LooperExecutor.java @@ -1,9 +1,20 @@ /** - * LooperExecutor.class - * 璇存槑锛 Looper绾跨▼ - * - * By Dync.inc & Maozongwu - * - 2015/7/20 + * Copyright (c) 2016 The AnyRTC project authors. All Rights Reserved. + * + * Please visit https://www.anyrtc.io for detail. + * + * The GNU General Public License is a free, copyleft license for + * software and other kinds of works. + * + * The licenses for most software and other practical works are designed + * to take away your freedom to share and change the works. By contrast, + * the GNU General Public License is intended to guarantee your freedom to + * share and change all versions of a program--to make sure it remains free + * software for all its users. We, the Free Software Foundation, use the + * GNU General Public License for most of our software; it applies also to + * any other work released this way by its authors. You can apply it to + * your programs, too. + * See the GNU LICENSE file for more info. */ package org.anyrtc.core; diff --git a/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPGuestHelper.java b/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPGuestHelper.java index 0a631e07ae733f3b3b210e290b0ef6394b55c3e2..9b9549f185bbbafaad08a5929659c02f7aef0563 100644 --- a/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPGuestHelper.java +++ b/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPGuestHelper.java @@ -1,3 +1,21 @@ +/** + * Copyright (c) 2016 The AnyRTC project authors. All Rights Reserved. + * + * Please visit https://www.anyrtc.io for detail. + * + * The GNU General Public License is a free, copyleft license for + * software and other kinds of works. + * + * The licenses for most software and other practical works are designed + * to take away your freedom to share and change the works. By contrast, + * the GNU General Public License is intended to guarantee your freedom to + * share and change all versions of a program--to make sure it remains free + * software for all its users. We, the Free Software Foundation, use the + * GNU General Public License for most of our software; it applies also to + * any other work released this way by its authors. You can apply it to + * your programs, too. + * See the GNU LICENSE file for more info. + */ package org.anyrtc.core; /** diff --git a/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPGuestKit.java b/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPGuestKit.java index e64d6f861d925a7eec1bee89a1fda1db6c7f97c4..eeab36a8968b9bd619dc34668c3693eb757ff643 100644 --- a/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPGuestKit.java +++ b/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPGuestKit.java @@ -1,3 +1,21 @@ +/** + * Copyright (c) 2016 The AnyRTC project authors. All Rights Reserved. + * + * Please visit https://www.anyrtc.io for detail. + * + * The GNU General Public License is a free, copyleft license for + * software and other kinds of works. + * + * The licenses for most software and other practical works are designed + * to take away your freedom to share and change the works. By contrast, + * the GNU General Public License is intended to guarantee your freedom to + * share and change all versions of a program--to make sure it remains free + * software for all its users. We, the Free Software Foundation, use the + * GNU General Public License for most of our software; it applies also to + * any other work released this way by its authors. You can apply it to + * your programs, too. + * See the GNU LICENSE file for more info. + */ package org.anyrtc.core; import android.app.Activity; diff --git a/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPHosterHelper.java b/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPHosterHelper.java index 4e57906071de5b01642dc3b507a05bc8b72b625e..4d772bcc94e746c5b44dfd924c18dcb2cde2300f 100644 --- a/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPHosterHelper.java +++ b/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPHosterHelper.java @@ -1,3 +1,21 @@ +/** + * Copyright (c) 2016 The AnyRTC project authors. All Rights Reserved. + * + * Please visit https://www.anyrtc.io for detail. + * + * The GNU General Public License is a free, copyleft license for + * software and other kinds of works. + * + * The licenses for most software and other practical works are designed + * to take away your freedom to share and change the works. By contrast, + * the GNU General Public License is intended to guarantee your freedom to + * share and change all versions of a program--to make sure it remains free + * software for all its users. We, the Free Software Foundation, use the + * GNU General Public License for most of our software; it applies also to + * any other work released this way by its authors. You can apply it to + * your programs, too. + * See the GNU LICENSE file for more info. + */ package org.anyrtc.core; /** diff --git a/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPHosterKit.java b/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPHosterKit.java index d088f96ef2947c662f4bfa6a312f287964ca80a1..a6ab0ad262969a1d1a9d8b2d40e0e7b37cb68635 100644 --- a/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPHosterKit.java +++ b/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPHosterKit.java @@ -1,3 +1,21 @@ +/** + * Copyright (c) 2016 The AnyRTC project authors. All Rights Reserved. + * + * Please visit https://www.anyrtc.io for detail. + * + * The GNU General Public License is a free, copyleft license for + * software and other kinds of works. + * + * The licenses for most software and other practical works are designed + * to take away your freedom to share and change the works. By contrast, + * the GNU General Public License is intended to guarantee your freedom to + * share and change all versions of a program--to make sure it remains free + * software for all its users. We, the Free Software Foundation, use the + * GNU General Public License for most of our software; it applies also to + * any other work released this way by its authors. You can apply it to + * your programs, too. + * See the GNU LICENSE file for more info. + */ package org.anyrtc.core; import android.app.Activity; diff --git a/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPUtils.java b/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPUtils.java index 30fac4743ac9a4a5986ce8ab807dc0ef88cb45af..e4f57fcee1e2c4bd3b665c63071de51106bd7e8a 100644 --- a/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPUtils.java +++ b/Prj-Android/app/src/main/java/org/anyrtc/core/RTMPUtils.java @@ -1,3 +1,21 @@ +/** + * Copyright (c) 2016 The AnyRTC project authors. All Rights Reserved. + * + * Please visit https://www.anyrtc.io for detail. + * + * The GNU General Public License is a free, copyleft license for + * software and other kinds of works. + * + * The licenses for most software and other practical works are designed + * to take away your freedom to share and change the works. By contrast, + * the GNU General Public License is intended to guarantee your freedom to + * share and change all versions of a program--to make sure it remains free + * software for all its users. We, the Free Software Foundation, use the + * GNU General Public License for most of our software; it applies also to + * any other work released this way by its authors. You can apply it to + * your programs, too. + * See the GNU LICENSE file for more info. + */ package org.anyrtc.core; import android.os.Build; diff --git a/Prj-Android/app/src/main/java/org/webrtc/Camera1Enumerator.java b/Prj-Android/app/src/main/java/org/webrtc/Camera1Enumerator.java index 290c8f7e9d289e94de04e607ca74314e6516681b..cbbfa72598c5db599adaaf614f0576220b27a639 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/Camera1Enumerator.java +++ b/Prj-Android/app/src/main/java/org/webrtc/Camera1Enumerator.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/Camera2Enumerator.java b/Prj-Android/app/src/main/java/org/webrtc/Camera2Enumerator.java index 4a54ea8d876a51578a76df12fc832d63af7602cf..230d52bd8acf04aa1460b6fa7b2f304be6652300 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/Camera2Enumerator.java +++ b/Prj-Android/app/src/main/java/org/webrtc/Camera2Enumerator.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/CameraEnumerationAndroid.java b/Prj-Android/app/src/main/java/org/webrtc/CameraEnumerationAndroid.java index 84ebc5a99b4223dfdf863bdde666ebb66038e728..a193d9925ba80fcb96248eaf6a1f8f1c18dbc6ab 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/CameraEnumerationAndroid.java +++ b/Prj-Android/app/src/main/java/org/webrtc/CameraEnumerationAndroid.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/CameraEnumerator.java b/Prj-Android/app/src/main/java/org/webrtc/CameraEnumerator.java index 91bd726b229ad1158dc5b835ff0ead506ca51493..d6674a930ec6a5ce7e5a98803c820c016d5f2100 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/CameraEnumerator.java +++ b/Prj-Android/app/src/main/java/org/webrtc/CameraEnumerator.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 The WebRTC project authors. All Rights Reserved. + * Copyright 2016 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/CameraVideoCapturer.java b/Prj-Android/app/src/main/java/org/webrtc/CameraVideoCapturer.java index 46432d4619f81e9c5932ad6cb26baa2b9bed9e69..0622710e36dfa9029593c12189d8079dbc5a0504 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/CameraVideoCapturer.java +++ b/Prj-Android/app/src/main/java/org/webrtc/CameraVideoCapturer.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 The WebRTC project authors. All Rights Reserved. + * Copyright 2016 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/EglBase.java b/Prj-Android/app/src/main/java/org/webrtc/EglBase.java index 05dd8060d45c5edd347100de051010475ab4e41c..40040fa0f82876e87e5c0bf0230bcc206da0b2be 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/EglBase.java +++ b/Prj-Android/app/src/main/java/org/webrtc/EglBase.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/EglBase10.java b/Prj-Android/app/src/main/java/org/webrtc/EglBase10.java index d2a14312fc1572b84982649876c611ffb6820de8..f6e5d84a8f0a6f32261e272811a23ff8c44f3796 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/EglBase10.java +++ b/Prj-Android/app/src/main/java/org/webrtc/EglBase10.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/EglBase14.java b/Prj-Android/app/src/main/java/org/webrtc/EglBase14.java index c788aaea4fa9d7876a2c1739847e0609ce0b4fbb..eaad87fcb50740ddef0a1d34e0dcf48cab9f2646 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/EglBase14.java +++ b/Prj-Android/app/src/main/java/org/webrtc/EglBase14.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/GlRectDrawer.java b/Prj-Android/app/src/main/java/org/webrtc/GlRectDrawer.java index 0595e2be210d7b1e49eb4080196d22b27cd5a50d..abeb871ef7eacd0d7be4683ad61f051b6f1778d1 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/GlRectDrawer.java +++ b/Prj-Android/app/src/main/java/org/webrtc/GlRectDrawer.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/GlShader.java b/Prj-Android/app/src/main/java/org/webrtc/GlShader.java index be1063531b48eb85ba855970ef43cd009ab60477..85886afdbffb6a62a103e47a98a92f9f99b6387d 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/GlShader.java +++ b/Prj-Android/app/src/main/java/org/webrtc/GlShader.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/GlTextureFrameBuffer.java b/Prj-Android/app/src/main/java/org/webrtc/GlTextureFrameBuffer.java index a456010c1c64b4e69366f3a1831a9ea9215fac3d..edf82f5ba3cdf4d982c1ce410755807d8932eeb1 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/GlTextureFrameBuffer.java +++ b/Prj-Android/app/src/main/java/org/webrtc/GlTextureFrameBuffer.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/GlUtil.java b/Prj-Android/app/src/main/java/org/webrtc/GlUtil.java index 6f5e60541a2a3a0fb91c4cfcde167cc1e1b5b520..b4fb8140a3d425cefc2b83835cafd6c592ec1a5e 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/GlUtil.java +++ b/Prj-Android/app/src/main/java/org/webrtc/GlUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/Logging.java b/Prj-Android/app/src/main/java/org/webrtc/Logging.java index b6deb62dbd7a387468ffb66c34843262ac5b4bc0..82aacd156c95df95d06fbf17fc579f21201f8083 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/Logging.java +++ b/Prj-Android/app/src/main/java/org/webrtc/Logging.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. + * Copyright (c) 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/MediaCodecVideoDecoder.java b/Prj-Android/app/src/main/java/org/webrtc/MediaCodecVideoDecoder.java index 6c5d4e5a4d42e72303113e91b16cbb149ce307ca..3ccff4618d1f73af097eeda1697a12fe86509c5b 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/MediaCodecVideoDecoder.java +++ b/Prj-Android/app/src/main/java/org/webrtc/MediaCodecVideoDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 The WebRTC project authors. All Rights Reserved. + * Copyright 2014 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/MediaCodecVideoEncoder.java b/Prj-Android/app/src/main/java/org/webrtc/MediaCodecVideoEncoder.java index b7c7b761cbdccb3551c6a5be375f106ba31dcee8..5220b169d7bc4da91ac19894e9d003a450aa2e03 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/MediaCodecVideoEncoder.java +++ b/Prj-Android/app/src/main/java/org/webrtc/MediaCodecVideoEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 The WebRTC project authors. All Rights Reserved. + * Copyright 2013 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/PercentFrameLayout.java b/Prj-Android/app/src/main/java/org/webrtc/PercentFrameLayout.java index 911964bd57b8538cc3cc1ed6a3209d6faafbe2f3..b993d22f92323e29bb20c3822812c59b8e686d1a 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/PercentFrameLayout.java +++ b/Prj-Android/app/src/main/java/org/webrtc/PercentFrameLayout.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC Project Authors. All rights reserved. + * Copyright 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/RendererCommon.java b/Prj-Android/app/src/main/java/org/webrtc/RendererCommon.java index e0fb6d7381b729cf278a3ecd39572a65382c4903..a09648bbe80a8ff9bad576269fdb220eea3d3a70 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/RendererCommon.java +++ b/Prj-Android/app/src/main/java/org/webrtc/RendererCommon.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/Size.java b/Prj-Android/app/src/main/java/org/webrtc/Size.java index a711b5d2cadd3a8d7ce33ce813103d14ff160873..f5a4e0a94dc115be9a0d3c338e437f8b4013eaab 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/Size.java +++ b/Prj-Android/app/src/main/java/org/webrtc/Size.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 The WebRTC project authors. All Rights Reserved. + * Copyright 2016 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/SurfaceTextureHelper.java b/Prj-Android/app/src/main/java/org/webrtc/SurfaceTextureHelper.java index 3c214ff16e8e69b6a5f576a808cb1f44dac83ce7..9d4bddb53d50eca933ced03afbede45021020820 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/SurfaceTextureHelper.java +++ b/Prj-Android/app/src/main/java/org/webrtc/SurfaceTextureHelper.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/SurfaceViewRenderer.java b/Prj-Android/app/src/main/java/org/webrtc/SurfaceViewRenderer.java index d479da76ac2be3213f66ea01d71f83c2a604c6bb..f1b84fa836f74a57de2f301204b59940dd2e3e34 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/SurfaceViewRenderer.java +++ b/Prj-Android/app/src/main/java/org/webrtc/SurfaceViewRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/ThreadUtils.java b/Prj-Android/app/src/main/java/org/webrtc/ThreadUtils.java index 95d41ba56337d646877781bfc19edb3b6f96e298..747ab2801c63eb7252b7968939dc54cfc1bb221e 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/ThreadUtils.java +++ b/Prj-Android/app/src/main/java/org/webrtc/ThreadUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/VideoCapturer.java b/Prj-Android/app/src/main/java/org/webrtc/VideoCapturer.java index 1009912d8f732feaa2466fe5112ff36ce57c19c9..4f97884252e1a38fcef7653c0647724c7b09e78c 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/VideoCapturer.java +++ b/Prj-Android/app/src/main/java/org/webrtc/VideoCapturer.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 The WebRTC project authors. All Rights Reserved. + * Copyright 2013 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/VideoCapturerAndroid.java b/Prj-Android/app/src/main/java/org/webrtc/VideoCapturerAndroid.java index 9c7bf78a8182be11ef3a3189a661ec1ddf3aeb57..64840c38ea5fdf6c840df6164d40710d6f16fcbc 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/VideoCapturerAndroid.java +++ b/Prj-Android/app/src/main/java/org/webrtc/VideoCapturerAndroid.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/VideoRenderer.java b/Prj-Android/app/src/main/java/org/webrtc/VideoRenderer.java index c76ce076f0b48d4877beb0ecd3c4cd668348274e..9cc9bbcaa990968965f814d5664a3ec6778b924a 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/VideoRenderer.java +++ b/Prj-Android/app/src/main/java/org/webrtc/VideoRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 The WebRTC project authors. All Rights Reserved. + * Copyright 2013 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/VideoRendererGui.java b/Prj-Android/app/src/main/java/org/webrtc/VideoRendererGui.java index 38b2aa60363f7a176f3125b42c9c06bf69ab9334..843e04483a39d1f8f210ff88a748cd02a7e4e58e 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/VideoRendererGui.java +++ b/Prj-Android/app/src/main/java/org/webrtc/VideoRendererGui.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 The WebRTC project authors. All Rights Reserved. + * Copyright 2014 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/voiceengine/BuildInfo.java b/Prj-Android/app/src/main/java/org/webrtc/voiceengine/BuildInfo.java index 95ff585947d7cb1b11af4dd02839d6973cf38a40..03be25eec599bafa3843da92c3058526dbd04f46 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/voiceengine/BuildInfo.java +++ b/Prj-Android/app/src/main/java/org/webrtc/voiceengine/BuildInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. + * Copyright (c) 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioEffects.java b/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioEffects.java index 875a949d6219e6e025139b13fdb6d78db24f835d..41f2f877ec6d28eef8922548a7a3358a9c132633 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioEffects.java +++ b/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioEffects.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. + * Copyright (c) 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioManager.java b/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioManager.java index 7190451b49336ad5101587357ced9f9780bed3ce..d6b3ee93f3071f0850b4506cce10a3744303683b 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioManager.java +++ b/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. + * Copyright (c) 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioRecord.java b/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioRecord.java index 942609b384ad5971ac6622016bb0229f67d97740..db6c27f9b31d374bc3d71774c54bfdf6000a9dc3 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioRecord.java +++ b/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioRecord.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. + * Copyright (c) 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioTrack.java b/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioTrack.java index 59f98fd4a8cdabb598c227380987c352b131fa2e..2042bcd129c9634c06b843b3c9acf5a5c26317a9 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioTrack.java +++ b/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioTrack.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. + * Copyright (c) 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioUtils.java b/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioUtils.java index 545c9f930f653a5d3578221a77ec2ae2d1ac209c..120a8cdd3bc9fd1150022d5d34d6e6eed6119b74 100644 --- a/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioUtils.java +++ b/Prj-Android/app/src/main/java/org/webrtc/voiceengine/WebRtcAudioUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. + * Copyright (c) 2015 The WebRTC@AnyRTC 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 diff --git a/Prj-Android/app/src/main/jniLibs/armeabi-v7a/libanyrtmp-jni.so b/Prj-Android/app/src/main/jniLibs/armeabi-v7a/libanyrtmp-jni.so index fff6346cc61f280fe85edf059f74ced838025eaa..d935539bbbb736169b1b68e3ec85f26c3ea5de2c 100644 Binary files a/Prj-Android/app/src/main/jniLibs/armeabi-v7a/libanyrtmp-jni.so and b/Prj-Android/app/src/main/jniLibs/armeabi-v7a/libanyrtmp-jni.so differ diff --git a/Prj-Android/app/src/main/res/layout/activity_guest.xml b/Prj-Android/app/src/main/res/layout/activity_guest.xml index 1787bfb0292bec41a34fca0c4dfeb54c4d1d8578..2568ec2b3fe54bca9577fb4317e0efce175cd899 100644 --- a/Prj-Android/app/src/main/res/layout/activity_guest.xml +++ b/Prj-Android/app/src/main/res/layout/activity_guest.xml @@ -9,9 +9,31 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> + + + + + + android:layout_alignParentRight="true" + android:layout_below="@+id/llayout_host_tools" + android:layout_margin="15dp" + android:text="RTMP" + android:textColor="@android:color/holo_red_dark" /> diff --git a/Prj-Android/app/src/main/res/layout/activity_hoster.xml b/Prj-Android/app/src/main/res/layout/activity_hoster.xml index 1787bfb0292bec41a34fca0c4dfeb54c4d1d8578..aead5550d1964859e6bd149df9b1a98f09b515bc 100644 --- a/Prj-Android/app/src/main/res/layout/activity_hoster.xml +++ b/Prj-Android/app/src/main/res/layout/activity_hoster.xml @@ -7,11 +7,45 @@ + android:layout_height="match_parent" + android:layout_alignParentTop="true" + android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" /> + + + + + + + diff --git a/Prj-Android/app/src/main/res/layout/activity_main.xml b/Prj-Android/app/src/main/res/layout/activity_main.xml index 86c4771ddf31bf25da768885948abdd8066daea3..628ee0c17633d9d8f81fefffd243ec8b426ef98a 100644 --- a/Prj-Android/app/src/main/res/layout/activity_main.xml +++ b/Prj-Android/app/src/main/res/layout/activity_main.xml @@ -8,23 +8,26 @@ android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="org.anyrtc.anyrtmp.MainActivity"> + + + android:layout_gravity="center_horizontal" + android:src="@drawable/anyrtc" /> + +