├── .DS_Store ├── README.md ├── VideoLive-Android ├── .gitignore ├── app │ ├── .DS_Store │ ├── .gitignore │ ├── build.gradle │ ├── libs │ │ └── rtc.aar │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── io │ │ │ └── anyrtc │ │ │ └── videolive │ │ │ └── ExampleInstrumentedTest.kt │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── io │ │ │ │ └── anyrtc │ │ │ │ └── videolive │ │ │ │ ├── App.kt │ │ │ │ ├── api │ │ │ │ ├── API.kt │ │ │ │ ├── ServerManager.kt │ │ │ │ └── bean │ │ │ │ │ ├── CDNStreamLayoutInfo.kt │ │ │ │ │ ├── ChatMessageData.kt │ │ │ │ │ ├── CreateRoomBean.java │ │ │ │ │ ├── ErrorInfo.kt │ │ │ │ │ ├── GuestUserInfo.kt │ │ │ │ │ ├── JoinRoomBean.java │ │ │ │ │ ├── LeaveRoomBean.kt │ │ │ │ │ ├── ModifyNameBean.java │ │ │ │ │ ├── MusicBean.java │ │ │ │ │ ├── RoomListBean.java │ │ │ │ │ ├── RoomMusicInfo.java │ │ │ │ │ ├── SignInBean.java │ │ │ │ │ ├── SignUpBean.java │ │ │ │ │ └── UserInfoBean.kt │ │ │ │ ├── sdk │ │ │ │ ├── RtcListener.kt │ │ │ │ ├── RtcManager.kt │ │ │ │ ├── RtcMember.kt │ │ │ │ ├── RtmListener.kt │ │ │ │ └── RtmManager.kt │ │ │ │ ├── ui │ │ │ │ ├── RoomListAdapter.kt │ │ │ │ ├── activity │ │ │ │ │ ├── AboutActivity.kt │ │ │ │ │ ├── BaseActivity.kt │ │ │ │ │ ├── CDNGuestActivity.kt │ │ │ │ │ ├── CDNHostActivity.kt │ │ │ │ │ ├── ChatMessageListAdapter.kt │ │ │ │ │ ├── CreateRoomActivity.kt │ │ │ │ │ ├── HandsUpListAdapter.kt │ │ │ │ │ ├── LiveBroadcastBaseActivity.kt │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ ├── RTCGuestActivity.kt │ │ │ │ │ ├── RTCHostActivity.kt │ │ │ │ │ └── SplashActivity.kt │ │ │ │ └── fragment │ │ │ │ │ ├── HomeFragment.kt │ │ │ │ │ ├── InputDialogFragment.kt │ │ │ │ │ └── MineFragment.kt │ │ │ │ ├── utils │ │ │ │ ├── AndroidScope.kt │ │ │ │ ├── Constans.kt │ │ │ │ ├── Interval.kt │ │ │ │ ├── IntervalStatus.kt │ │ │ │ ├── KotlinEX.kt │ │ │ │ ├── Scope.kt │ │ │ │ ├── ScreenUtils.kt │ │ │ │ └── SpUtil.kt │ │ │ │ ├── view │ │ │ │ ├── AnyRefreshHeader.kt │ │ │ │ ├── AnyVideosLayout.kt │ │ │ │ ├── ChatRecyclerView.kt │ │ │ │ ├── SmartRefreshRewrite.kt │ │ │ │ └── videobuilder │ │ │ │ │ ├── DefaultVideoViewBuilderImpl.kt │ │ │ │ │ ├── DefaultVideoViewParent.kt │ │ │ │ │ ├── VideoViewBuilder.kt │ │ │ │ │ └── VideoViewInterface.kt │ │ │ │ ├── vm │ │ │ │ ├── BaseLiveVM.kt │ │ │ │ ├── CDNLiveVM.kt │ │ │ │ ├── MainVM.kt │ │ │ │ └── RTCLiveVM.kt │ │ │ │ └── weight │ │ │ │ ├── ItemOffsetsCalculator.kt │ │ │ │ ├── ItemOffsetsRequestBuilder.kt │ │ │ │ ├── Spacing.kt │ │ │ │ └── SpacingItemDecoration.kt │ │ └── res │ │ │ ├── anim │ │ │ └── loading_anim.xml │ │ │ ├── color │ │ │ ├── select_bottom.xml │ │ │ └── selector_create_text_color.xml │ │ │ ├── drawable-v24 │ │ │ └── ic_launcher_foreground.xml │ │ │ ├── drawable-xxhdpi │ │ │ ├── google.jpg │ │ │ ├── guest_icon_switch.png │ │ │ ├── host_icon_camera_disable.png │ │ │ ├── host_icon_chat.png │ │ │ ├── host_icon_download.png │ │ │ ├── host_icon_ear_disabled.png │ │ │ ├── host_icon_ear_enabled.png │ │ │ ├── host_icon_group.png │ │ │ ├── host_icon_leave.png │ │ │ ├── host_icon_menu.png │ │ │ ├── host_icon_microphone_disable.png │ │ │ ├── host_icon_music.png │ │ │ ├── host_icon_relayout_grid.png │ │ │ ├── host_icon_relayout_topic.png │ │ │ ├── host_icon_switch_camera.png │ │ │ ├── host_icon_upload.png │ │ │ ├── host_icon_video.png │ │ │ ├── host_icon_video_disable.png │ │ │ ├── host_icon_voice.png │ │ │ ├── host_icon_voice_disable.png │ │ │ ├── img_create_bg.png │ │ │ ├── img_faban.png │ │ │ ├── img_loading.png │ │ │ ├── img_mianze.png │ │ │ ├── img_mine_top_bg.png │ │ │ ├── img_modify_name.png │ │ │ ├── img_name.png │ │ │ ├── img_no_room.png │ │ │ ├── img_refresh_logo.png │ │ │ ├── img_sdk.png │ │ │ ├── img_splash_logo.png │ │ │ ├── img_version.png │ │ │ ├── img_yinsi.png │ │ │ ├── img_zhuce.png │ │ │ ├── tips_icon_camera_disabled.png │ │ │ ├── tips_icon_camera_enabled.png │ │ │ ├── tips_icon_headset.png │ │ │ ├── tips_icon_mike_disabled.png │ │ │ ├── tips_icon_mike_enabled.png │ │ │ └── tips_icon_warning.png │ │ │ ├── drawable │ │ │ ├── checkbox_resolution_checked.xml │ │ │ ├── checkbox_resolution_unchecked.xml │ │ │ ├── checkbox_video_icon.xml │ │ │ ├── checkbox_voice_icon.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── img_add.xml │ │ │ ├── img_back.xml │ │ │ ├── img_back_x.xml │ │ │ ├── img_back_x_white.xml │ │ │ ├── img_home.xml │ │ │ ├── img_mine.xml │ │ │ ├── message_input_bg.xml │ │ │ ├── mike_icon_bg.xml │ │ │ ├── rtc_host_bottom_sheet_agree_bg.xml │ │ │ ├── rtc_host_bottom_sheet_agree_disabled_bg.xml │ │ │ ├── rtc_host_bottom_sheet_bg.xml │ │ │ ├── rtc_host_bottom_sheet_refuse_bg.xml │ │ │ ├── rtc_host_group_bg.xml │ │ │ ├── select_room_mode.xml │ │ │ ├── selector_btn_create.xml │ │ │ ├── shape_btn_create_select.xml │ │ │ ├── shape_btn_create_unselect.xml │ │ │ ├── shape_cdn_loading_bg.xml │ │ │ ├── shape_create_btn.xml │ │ │ ├── shape_create_room_mode.xml │ │ │ ├── shape_et_create_room.xml │ │ │ ├── shape_guest_text_btn_bg.xml │ │ │ ├── shape_home_bg.xml │ │ │ ├── shape_host_bottom_bar.xml │ │ │ ├── shape_host_music_bg.xml │ │ │ ├── shape_item_chat_bg.xml │ │ │ ├── shape_loading_bg.xml │ │ │ ├── shape_mode_normol.xml │ │ │ ├── shape_texture_parent_bg.xml │ │ │ └── shape_toast_tips_bg.xml │ │ │ ├── layout │ │ │ ├── activity_about.xml │ │ │ ├── activity_create_room.xml │ │ │ ├── activity_guest.xml │ │ │ ├── activity_host.xml │ │ │ ├── activity_main.xml │ │ │ ├── activity_splash.xml │ │ │ ├── dialog_input.xml │ │ │ ├── fragment_home.xml │ │ │ ├── fragment_mine.xml │ │ │ ├── item_chat.xml │ │ │ ├── layout_loading.xml │ │ │ ├── layout_modify_name.xml │ │ │ ├── layout_no_room.xml │ │ │ ├── layout_parent_texture.xml │ │ │ ├── layout_room_list.xml │ │ │ ├── rtc_host_bottom_sheet_item.xml │ │ │ ├── rtc_host_menu_sheet.xml │ │ │ ├── rtc_host_queue_sheet.xml │ │ │ └── toast_tips.xml │ │ │ ├── menu │ │ │ └── tab_menu.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ └── ic_launcher.xml │ │ │ ├── mipmap-xxhdpi │ │ │ └── img_launcher.png │ │ │ ├── values-night │ │ │ └── themes.xml │ │ │ ├── values │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ ├── style.xml │ │ │ ├── themes.xml │ │ │ └── values.xml │ │ │ └── xml │ │ │ └── network_security_config.xml │ │ └── test │ │ └── java │ │ └── io │ │ └── anyrtc │ │ └── videolive │ │ └── ExampleUnitTest.kt ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle ├── VideoLive-iOS ├── .DS_Store ├── Podfile ├── Podfile.lock ├── Pods │ ├── .DS_Store │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ ├── project.pbxproj │ │ └── xcuserdata │ │ │ ├── a1.xcuserdatad │ │ │ └── xcschemes │ │ │ │ ├── Pods-VideoLive-iOS.xcscheme │ │ │ │ └── xcschememanagement.plist │ │ │ └── yusheng.xcuserdatad │ │ │ └── xcschemes │ │ │ ├── Pods-VideoLive-iOS.xcscheme │ │ │ └── xcschememanagement.plist │ └── Target Support Files │ │ └── Pods-VideoLive-iOS │ │ ├── Pods-VideoLive-iOS-Info.plist │ │ ├── Pods-VideoLive-iOS-acknowledgements.markdown │ │ ├── Pods-VideoLive-iOS-acknowledgements.plist │ │ ├── Pods-VideoLive-iOS-dummy.m │ │ ├── Pods-VideoLive-iOS-frameworks-Debug-input-files.xcfilelist │ │ ├── Pods-VideoLive-iOS-frameworks-Debug-output-files.xcfilelist │ │ ├── Pods-VideoLive-iOS-frameworks-Release-input-files.xcfilelist │ │ ├── Pods-VideoLive-iOS-frameworks-Release-output-files.xcfilelist │ │ ├── Pods-VideoLive-iOS-frameworks.sh │ │ ├── Pods-VideoLive-iOS-umbrella.h │ │ ├── Pods-VideoLive-iOS.debug.xcconfig │ │ ├── Pods-VideoLive-iOS.modulemap │ │ └── Pods-VideoLive-iOS.release.xcconfig ├── README.md ├── VideoLive-iOS.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── a1.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ ├── xcshareddata │ │ └── xcschemes │ │ │ └── VideoLive-iOS.xcscheme │ └── xcuserdata │ │ ├── a1.xcuserdatad │ │ └── xcschemes │ │ │ └── xcschememanagement.plist │ │ └── yusheng.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist ├── VideoLive-iOS.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── xcuserdata │ │ ├── a1.xcuserdatad │ │ ├── UserInterfaceState.xcuserstate │ │ └── xcdebugger │ │ │ └── Breakpoints_v2.xcbkptlist │ │ └── yusheng.xcuserdatad │ │ └── UserInterfaceState.xcuserstate └── VideoLive-iOS │ ├── .DS_Store │ ├── ARBaseNavigationController.swift │ ├── ARTabBarController.swift │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── .DS_Store │ ├── AccentColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-1024.png │ │ ├── Icon-167@2x.png │ │ ├── Icon-20.png │ │ ├── Icon-20@2x-1.png │ │ ├── Icon-20@2x.png │ │ ├── Icon-20@3x.png │ │ ├── Icon-60@2x.png │ │ ├── Icon-60@3x.png │ │ ├── Icon-76.png │ │ ├── Icon-76@2x.png │ │ ├── Icon-Small-1.png │ │ ├── Icon-Small.png │ │ ├── Icon-Small@2x-1.png │ │ ├── Icon-Small@2x.png │ │ ├── Icon-Small@3x.png │ │ ├── Icon-Spotlight-40.png │ │ ├── Icon-Spotlight-40@2x-1.png │ │ ├── Icon-Spotlight-40@2x.png │ │ ├── Icon-Spotlight-40@3x.png │ │ ├── Icon.png │ │ └── Icon@2x.png │ ├── Contents.json │ └── resource │ │ ├── .DS_Store │ │ ├── Contents.json │ │ ├── icon_add.imageset │ │ ├── Contents.json │ │ ├── icon_add@2x.png │ │ └── icon_add@3x.png │ │ ├── icon_appversion.imageset │ │ ├── Contents.json │ │ ├── icon_appversion@2x.png │ │ └── icon_appversion@3x.png │ │ ├── icon_audio.imageset │ │ ├── Contents.json │ │ ├── icon_audio@2x.png │ │ └── icon_audio@3x.png │ │ ├── icon_audio_close.imageset │ │ ├── Contents.json │ │ ├── icon_audio_close@2x.png │ │ └── icon_audio_close@3x.png │ │ ├── icon_back.imageset │ │ ├── Contents.json │ │ ├── icon_back@2x.png │ │ └── icon_back@3x.png │ │ ├── icon_back0.imageset │ │ ├── Contents.json │ │ ├── icon_back0@2x.png │ │ └── icon_back0@3x.png │ │ ├── icon_back1.imageset │ │ ├── Contents.json │ │ ├── icon_back1@2x.png │ │ └── icon_back1@3x.png │ │ ├── icon_back2.imageset │ │ ├── Contents.json │ │ ├── icon_back2@2x.png │ │ └── icon_back2@3x.png │ │ ├── icon_back3.imageset │ │ ├── Contents.json │ │ ├── icon_back3@2x.png │ │ └── icon_back3@3x.png │ │ ├── icon_back4.imageset │ │ ├── Contents.json │ │ ├── icon_back4@2x.png │ │ └── icon_back4@3x.png │ │ ├── icon_back5.imageset │ │ ├── Contents.json │ │ ├── icon_back5@2x.png │ │ └── icon_back5@3x.png │ │ ├── icon_chat.imageset │ │ ├── Contents.json │ │ ├── icon_chat@2x.png │ │ └── icon_chat@3x.png │ │ ├── icon_close.imageset │ │ ├── Contents.json │ │ ├── icon_close@2x.png │ │ └── icon_close@3x.png │ │ ├── icon_ear.imageset │ │ ├── Contents.json │ │ ├── icon_ear@2x.png │ │ └── icon_ear@3x.png │ │ ├── icon_ear_selected.imageset │ │ ├── Contents.json │ │ ├── icon_ear_selected@2x.png │ │ └── icon_ear_selected@3x.png │ │ ├── icon_edit.imageset │ │ ├── Contents.json │ │ ├── icon_edit@2x.png │ │ └── icon_edit@3x.png │ │ ├── icon_exit.imageset │ │ ├── Contents.json │ │ ├── icon_exit@2x.png │ │ └── icon_exit@3x.png │ │ ├── icon_green.imageset │ │ ├── Contents.json │ │ ├── icon_green@2x.png │ │ └── icon_green@3x.png │ │ ├── icon_hangup.imageset │ │ ├── Contents.json │ │ ├── icon_hangup@2x.png │ │ └── icon_hangup@3x.png │ │ ├── icon_head.imageset │ │ ├── Contents.json │ │ ├── icon_head@2x.png │ │ └── icon_head@3x.png │ │ ├── icon_launch.imageset │ │ ├── Contents.json │ │ ├── icon_launch@2x.png │ │ └── icon_launch@3x.png │ │ ├── icon_loading.imageset │ │ ├── Contents.json │ │ ├── icon_loading@2x.png │ │ └── icon_loading@3x.png │ │ ├── icon_loadings.imageset │ │ ├── Contents.json │ │ ├── icon_loadings@2x.png │ │ └── icon_loadings@3x.png │ │ ├── icon_lock.imageset │ │ ├── Contents.json │ │ ├── icon_lock@2x.png │ │ └── icon_lock@3x.png │ │ ├── icon_log.imageset │ │ ├── Contents.json │ │ ├── icon_log@2x.png │ │ └── icon_log@3x.png │ │ ├── icon_logo.imageset │ │ ├── Contents.json │ │ ├── icon_logo@2x.png │ │ └── icon_logo@3x.png │ │ ├── icon_more.imageset │ │ ├── Contents.json │ │ ├── icon_more@2x.png │ │ └── icon_more@3x.png │ │ ├── icon_more_equal.imageset │ │ ├── Contents.json │ │ ├── icon_more_equal@2x.png │ │ └── icon_more_equal@3x.png │ │ ├── icon_more_switch.imageset │ │ ├── Contents.json │ │ ├── icon_more_switch@2x.png │ │ └── icon_more_switch@3x.png │ │ ├── icon_more_unequal.imageset │ │ ├── Contents.json │ │ ├── icon_more_unequal@2x.png │ │ └── icon_more_unequal@3x.png │ │ ├── icon_music.imageset │ │ ├── Contents.json │ │ ├── icon_music@2x.png │ │ └── icon_music@3x.png │ │ ├── icon_red.imageset │ │ ├── Contents.json │ │ ├── icon_red@2x.png │ │ └── icon_red@3x.png │ │ ├── icon_refresh.imageset │ │ ├── Contents.json │ │ ├── icon_refresh@2x.png │ │ └── icon_refresh@3x.png │ │ ├── icon_register.imageset │ │ ├── Contents.json │ │ ├── icon_register@2x.png │ │ └── icon_register@3x.png │ │ ├── icon_sdkversion.imageset │ │ ├── Contents.json │ │ ├── icon_sdkversion@2x.png │ │ └── icon_sdkversion@3x.png │ │ ├── icon_switch.imageset │ │ ├── Contents.json │ │ ├── icon_switch@2x.png │ │ └── icon_switch@3x.png │ │ ├── icon_time.imageset │ │ ├── Contents.json │ │ ├── icon_time@2x.png │ │ └── icon_time@3x.png │ │ ├── icon_tip_audio_close.imageset │ │ ├── Contents.json │ │ ├── icon_tip_audio_close@2x.png │ │ └── icon_tip_audio_close@3x.png │ │ ├── icon_tip_audio_open.imageset │ │ ├── Contents.json │ │ ├── icon_tip_audio_open@2x.png │ │ └── icon_tip_audio_open@3x.png │ │ ├── icon_tip_head.imageset │ │ ├── Contents.json │ │ ├── icon_tip_head@2x.png │ │ └── icon_tip_head@3x.png │ │ ├── icon_tip_video_close.imageset │ │ ├── Contents.json │ │ ├── icon_tip_video_close@2x.png │ │ └── icon_tip_video_close@3x.png │ │ ├── icon_tip_video_open.imageset │ │ ├── Contents.json │ │ ├── icon_tip_video_open@2x.png │ │ └── icon_tip_video_open@3x.png │ │ ├── icon_tip_warning.imageset │ │ ├── Contents.json │ │ ├── icon_tip_warning@2x.png │ │ └── icon_tip_warning@3x.png │ │ ├── icon_video.imageset │ │ ├── Contents.json │ │ ├── icon_video@2x.png │ │ └── icon_video@3x.png │ │ └── icon_video_close.imageset │ │ ├── Contents.json │ │ ├── icon_video_close@2x.png │ │ └── icon_video_close@3x.png │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Common │ ├── .DS_Store │ ├── ARBaseViewController.swift │ ├── ARExtension.swift │ ├── ARNetWorkHepler.swift │ ├── ARPlaceholderView.swift │ ├── ARStatisticsInfo.swift │ ├── ARVideoView.swift │ ├── ARVideoView.xib │ └── Category │ │ ├── .DS_Store │ │ ├── UIAlertController+Blocks.h │ │ ├── UIAlertController+Blocks.m │ │ └── VideoLive-iOS-Bridging-Header.h │ ├── Info.plist │ ├── Log.storyboard │ ├── Main │ ├── ARCreateViewController.swift │ └── ARMainViewController.swift │ ├── Settings │ ├── AREditViewController.swift │ ├── ARSetupViewController.swift │ └── ARStatementViewController.swift │ └── Video │ ├── .DS_Store │ ├── ARMicViewController.swift │ ├── ARMoreViewController.swift │ ├── ARVideoViewController.swift │ └── LogViewController.swift ├── audience.png ├── effect.png ├── host.png └── native_to_cdn.png /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/.DS_Store -------------------------------------------------------------------------------- /VideoLive-Android/.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | *.apk 3 | *.ap_ 4 | *.aab 5 | 6 | # Files for the ART/Dalvik VM 7 | *.dex 8 | 9 | # Java class files 10 | *.class 11 | 12 | # Generated files 13 | bin/ 14 | gen/ 15 | out/ 16 | 17 | # Gradle files 18 | .gradle/ 19 | build/ 20 | 21 | # Local configuration file (sdk path, etc) 22 | local.properties 23 | 24 | # Proguard folder generated by Eclipse 25 | proguard/ 26 | 27 | # Log Files 28 | *.log 29 | 30 | # Android Studio Navigation editor temp files 31 | .navigation/ 32 | 33 | # Android Studio captures folder 34 | captures/ 35 | 36 | # IntelliJ 37 | *.iml 38 | .idea/ 39 | .idea/workspace.xml 40 | .idea/tasks.xml 41 | .idea/gradle.xml 42 | .idea/assetWizardSettings.xml 43 | .idea/dictionaries 44 | .idea/libraries 45 | .idea/caches 46 | 47 | # Keystore files 48 | # Uncomment the following lines if you do not want to check your keystore files in. 49 | #*.jks 50 | #*.keystore 51 | 52 | # External native build folder generated in Android Studio 2.2 and later 53 | .externalNativeBuild 54 | 55 | # Google Services (e.g. APIs or Firebase) 56 | # google-services.json 57 | 58 | # Freeline 59 | freeline.py 60 | freeline/ 61 | freeline_project_description.json 62 | 63 | # fastlane 64 | fastlane/report.xml 65 | fastlane/Preview.html 66 | fastlane/screenshots 67 | fastlane/test_output 68 | fastlane/readme.md 69 | 70 | # Version control 71 | vcs.xml 72 | 73 | # lint 74 | lint/intermediates/ 75 | lint/generated/ 76 | lint/outputs/ 77 | lint/tmp/ 78 | # lint/reports/ 79 | app/release 80 | -------------------------------------------------------------------------------- /VideoLive-Android/app/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/.DS_Store -------------------------------------------------------------------------------- /VideoLive-Android/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /VideoLive-Android/app/libs/rtc.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/libs/rtc.aar -------------------------------------------------------------------------------- /VideoLive-Android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /VideoLive-Android/app/src/androidTest/java/io/anyrtc/videolive/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive 2 | 3 | import androidx.test.platform.app.InstrumentationRegistry 4 | import androidx.test.ext.junit.runners.AndroidJUnit4 5 | 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | import org.junit.Assert.* 10 | 11 | /** 12 | * Instrumented test, which will execute on an Android device. 13 | * 14 | * See [testing documentation](http://d.android.com/tools/testing). 15 | */ 16 | @RunWith(AndroidJUnit4::class) 17 | class ExampleInstrumentedTest { 18 | @Test 19 | fun useAppContext() { 20 | // Context of the app under test. 21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 22 | assertEquals("io.anyrtc.videolive", appContext.packageName) 23 | } 24 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 21 | 24 | 25 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 35 | 37 | 39 | 41 | 43 | 45 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/App.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive 2 | 3 | import android.app.Application 4 | import android.content.pm.ApplicationInfo 5 | import com.hjq.permissions.XXPermissions 6 | import com.kongzue.dialog.util.DialogSettings 7 | import io.anyrtc.videolive.utils.Constans.HTTP_TOKEN 8 | import io.anyrtc.videolive.utils.SpUtil 9 | import okhttp3.OkHttpClient 10 | import rxhttp.RxHttpPlugins 11 | import rxhttp.wrapper.ssl.HttpsUtils 12 | import java.util.concurrent.TimeUnit 13 | import javax.net.ssl.HostnameVerifier 14 | import javax.net.ssl.SSLSession 15 | import kotlin.properties.Delegates 16 | 17 | 18 | class App : Application() { 19 | 20 | companion object{ 21 | var app : App by Delegates.notNull() 22 | } 23 | 24 | override fun onCreate() { 25 | super.onCreate() 26 | app = this 27 | SpUtil.init(this) 28 | XXPermissions.setScopedStorage(true) 29 | DialogSettings.style = DialogSettings.STYLE.STYLE_IOS 30 | RxHttpPlugins.init(getDefaultOkHttpClient()).setDebug(BuildConfig.DEBUG) 31 | .setOnParamAssembly { 32 | val token = SpUtil.get().getString(HTTP_TOKEN, "") 33 | if (!token.isNullOrEmpty()){ 34 | it.addHeader("Authorization", "Bearer $token") 35 | } 36 | it 37 | } 38 | } 39 | 40 | private fun getDefaultOkHttpClient(): OkHttpClient? { 41 | val sslParams = HttpsUtils.getSslSocketFactory() 42 | return OkHttpClient.Builder() 43 | .connectTimeout(10, TimeUnit.SECONDS) 44 | .readTimeout(10, TimeUnit.SECONDS) 45 | .writeTimeout(10, TimeUnit.SECONDS) 46 | .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager) //添加信任证书 47 | .hostnameVerifier(HostnameVerifier { hostname: String?, session: SSLSession? -> true }) //忽略host验证 48 | .build() 49 | } 50 | 51 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/api/API.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.api 2 | 3 | import io.anyrtc.videolive.BuildConfig 4 | import rxhttp.wrapper.annotation.DefaultDomain 5 | 6 | object API { 7 | 8 | @DefaultDomain 9 | /*@JvmField 10 | val BASE_API = if (!BuildConfig.DEBUG) { 11 | "http://192.168.1.115:12680/arapi/arlive/v1/" 12 | } else { 13 | "http://arlive.agrtc.cn:12680/arapi/arlive/v1/" 14 | }*/ 15 | const val BASE_API = "http://arlive.agrtc.cn:12680/arapi/arlive/v1/" 16 | 17 | const val SIGN_UP = "user/signUp" 18 | 19 | const val SIGN_IN = "user/signIn" 20 | 21 | const val GET_ROOM_LIST = "user/getVidRoomList" 22 | 23 | const val CREATE_ROOM = "user/addRoom" //6:视频RTC实时直播,7:视频客户端推流到CDN,8:视频服务端推流到CDN 24 | 25 | const val DELETE_ROOM = "user/deleteRoom" 26 | 27 | const val JOIN_ROOM = "user/joinRoom" 28 | 29 | const val LEAVE_ROOM = "user/updateV2UserLeaveTs" 30 | 31 | const val MODIFY_NAME = "user/updateUserName" 32 | 33 | const val GET_MUSIC = "user/getMusicList" 34 | 35 | const val UPDATE_MUSIC_STATES = "user/updateMusicState" 36 | 37 | const val GET_ROOM_MUSIC_INFO = "user/getRoomMusicInfo" 38 | 39 | const val GET_USER_INFO = "user/getUserInfo" 40 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/api/bean/CDNStreamLayoutInfo.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.api.bean 2 | 3 | data class CDNStreamLayoutInfo( 4 | val uid: String, 5 | var width: Int = 360, 6 | var height: Int = 640, 7 | var top: Int = 0, 8 | var left: Int = 0 9 | ) { 10 | companion object { 11 | val RESOLUTION_NORMAL = CDNStreamLayoutInfo("", width = 360, height = 640) 12 | val RESOLUTION_HIGH = CDNStreamLayoutInfo("", width = 540, height = 960) 13 | val RESOLUTION_ULTRA = CDNStreamLayoutInfo("", width = 720, height = 1280) 14 | 15 | const val MULTIPLE_PADDING = 2//pixel 16 | //const val TOP_PADDING = 0.1379f// percent of screen(height) 17 | const val TOP_PADDING = 0.0379f// percent of screen(height) 18 | const val TOPIC_MULTIPLE_PADDING = 0.01f// percent of screen(height) 19 | const val TOPIC_WIDTH = 0.2933f// percent of screen(width) 20 | const val HEIGHT_PERCENT = 1.777777778f 21 | } 22 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/api/bean/ChatMessageData.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.api.bean 2 | 3 | import io.anyrtc.videolive.view.videobuilder.VideoViewModel 4 | 5 | data class ChatMessageData( 6 | val nickname: String, 7 | val content: String, 8 | val yourself: Boolean 9 | ) : VideoViewModel -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/api/bean/CreateRoomBean.java: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.api.bean; 2 | 3 | public class CreateRoomBean { 4 | 5 | /** 6 | * {"code":0,"msg":"success.","data":{"roomId":"911224","roomTs":1609236149}} 7 | */ 8 | 9 | private int code; 10 | private String msg; 11 | private DataBean data; 12 | 13 | public int getCode() { 14 | return code; 15 | } 16 | 17 | public void setCode(int code) { 18 | this.code = code; 19 | } 20 | 21 | public String getMsg() { 22 | return msg; 23 | } 24 | 25 | public void setMsg(String msg) { 26 | this.msg = msg; 27 | } 28 | 29 | public DataBean getData() { 30 | return data; 31 | } 32 | 33 | public void setData(DataBean data) { 34 | this.data = data; 35 | } 36 | 37 | public static class DataBean { 38 | private String pushUrl; 39 | private String roomId; 40 | private String roomTs; 41 | private String rtcToken; 42 | private String rtmToken; 43 | 44 | public String getPushUrl() { 45 | return pushUrl; 46 | } 47 | 48 | public void setPushUrl(String pushUrl) { 49 | this.pushUrl = pushUrl; 50 | } 51 | 52 | public String getRoomId() { 53 | return roomId; 54 | } 55 | 56 | public void setRoomId(String roomId) { 57 | this.roomId = roomId; 58 | } 59 | 60 | public String getRoomTs() { 61 | return roomTs; 62 | } 63 | 64 | public void setRoomTs(String roomTs) { 65 | this.roomTs = roomTs; 66 | } 67 | 68 | public String getRtcToken() { 69 | return rtcToken; 70 | } 71 | 72 | public void setRtcToken(String rtcToken) { 73 | this.rtcToken = rtcToken; 74 | } 75 | 76 | public String getRtmToken() { 77 | return rtmToken; 78 | } 79 | 80 | public void setRtmToken(String rtmToken) { 81 | this.rtmToken = rtmToken; 82 | } 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/api/bean/ErrorInfo.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.api.bean 2 | 3 | data class ErrorInfo(val msg:String,val code:Int) 4 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/api/bean/GuestUserInfo.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.api.bean 2 | 3 | import io.anyrtc.videolive.view.videobuilder.VideoViewModel 4 | 5 | data class GuestUserInfo( 6 | val uid: String, 7 | val avatar: String, 8 | val nickname: String, 9 | var isMute: Boolean = false, 10 | var isCloseCamera: Boolean = false, 11 | var isRemove: Boolean = false, 12 | var waitForJoinRTC: Boolean = true, 13 | var index: Int = 0 14 | ) : VideoViewModel -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/api/bean/LeaveRoomBean.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.api.bean 2 | 3 | data class LeaveRoomBean( 4 | val code: Int, 5 | val msg: String 6 | ) -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/api/bean/ModifyNameBean.java: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.api.bean; 2 | 3 | public class ModifyNameBean { 4 | 5 | /** 6 | * code : 0 7 | * msg : success. 8 | * data : {"userName":"M2007J3SC"} 9 | */ 10 | 11 | private int code; 12 | private String msg; 13 | private DataBean data; 14 | 15 | public int getCode() { 16 | return code; 17 | } 18 | 19 | public void setCode(int code) { 20 | this.code = code; 21 | } 22 | 23 | public String getMsg() { 24 | return msg; 25 | } 26 | 27 | public void setMsg(String msg) { 28 | this.msg = msg; 29 | } 30 | 31 | public DataBean getData() { 32 | return data; 33 | } 34 | 35 | public void setData(DataBean data) { 36 | this.data = data; 37 | } 38 | 39 | public static class DataBean { 40 | /** 41 | * userName : M2007J3SC 42 | */ 43 | 44 | private String userName; 45 | 46 | public String getUserName() { 47 | return userName; 48 | } 49 | 50 | public void setUserName(String userName) { 51 | this.userName = userName; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/api/bean/RoomMusicInfo.java: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.api.bean; 2 | 3 | public class RoomMusicInfo { 4 | 5 | /** 6 | * code : 0 7 | * msg : success. 8 | * data : {"musicState":0,"musicId":0,"musicName":"","singer":"","musicUrl":""} 9 | */ 10 | 11 | private int code; 12 | private String msg; 13 | private DataBean data; 14 | 15 | public int getCode() { 16 | return code; 17 | } 18 | 19 | public void setCode(int code) { 20 | this.code = code; 21 | } 22 | 23 | public String getMsg() { 24 | return msg; 25 | } 26 | 27 | public void setMsg(String msg) { 28 | this.msg = msg; 29 | } 30 | 31 | public DataBean getData() { 32 | return data; 33 | } 34 | 35 | public void setData(DataBean data) { 36 | this.data = data; 37 | } 38 | 39 | public static class DataBean { 40 | /** 41 | * musicState : 0 42 | * musicId : 0 43 | * musicName : 44 | * singer : 45 | * musicUrl : 46 | */ 47 | 48 | private int musicState; 49 | private int musicId; 50 | private String musicName; 51 | private String singer; 52 | private String musicUrl; 53 | 54 | public int getMusicState() { 55 | return musicState; 56 | } 57 | 58 | public void setMusicState(int musicState) { 59 | this.musicState = musicState; 60 | } 61 | 62 | public int getMusicId() { 63 | return musicId; 64 | } 65 | 66 | public void setMusicId(int musicId) { 67 | this.musicId = musicId; 68 | } 69 | 70 | public String getMusicName() { 71 | return musicName; 72 | } 73 | 74 | public void setMusicName(String musicName) { 75 | this.musicName = musicName; 76 | } 77 | 78 | public String getSinger() { 79 | return singer; 80 | } 81 | 82 | public void setSinger(String singer) { 83 | this.singer = singer; 84 | } 85 | 86 | public String getMusicUrl() { 87 | return musicUrl; 88 | } 89 | 90 | public void setMusicUrl(String musicUrl) { 91 | this.musicUrl = musicUrl; 92 | } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/api/bean/SignUpBean.java: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.api.bean; 2 | 3 | public class SignUpBean { 4 | /** 5 | * { 6 | * "code": 0, 7 | * "msg": "success.", 8 | * "data": { 9 | * "uid": "13712434", 10 | * "userName": "YAL-AL00" 11 | * } 12 | * } 13 | */ 14 | 15 | private int code; 16 | private String msg; 17 | private DataBean data; 18 | 19 | public int getCode() { 20 | return code; 21 | } 22 | 23 | public void setCode(int code) { 24 | this.code = code; 25 | } 26 | 27 | public String getMsg() { 28 | return msg; 29 | } 30 | 31 | public void setMsg(String msg) { 32 | this.msg = msg; 33 | } 34 | 35 | public DataBean getData() { 36 | return data; 37 | } 38 | 39 | public void setData(DataBean data) { 40 | this.data = data; 41 | } 42 | 43 | public static class DataBean{ 44 | private String uid; 45 | private String userName; 46 | 47 | public String getUid() { 48 | return uid; 49 | } 50 | 51 | public void setUid(String uid) { 52 | this.uid = uid; 53 | } 54 | 55 | public String getUserName() { 56 | return userName; 57 | } 58 | 59 | public void setUserName(String userName) { 60 | this.userName = userName; 61 | } 62 | } 63 | 64 | } 65 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/api/bean/UserInfoBean.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.api.bean 2 | 3 | data class UserInfoBean( 4 | val data: UserInfoMenu 5 | ) 6 | 7 | data class UserInfoMenu( 8 | val avatar: String, 9 | val userName: String 10 | ) -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/sdk/RtcListener.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.sdk 2 | import org.ar.rtc.IRtcEngineEventHandler 3 | import org.ar.rtc.IRtcEngineEventHandler.LocalAudioStats 4 | 5 | abstract class RtcListener { 6 | 7 | abstract fun onJoinChannelSuccess(channel: String?, uid: String?, elapsed: Int) 8 | abstract fun onUserJoined(uid: String?, elapsed: Int) 9 | abstract fun onUserOffline(uid: String?, reason: Int) 10 | abstract fun onAudioVolumeIndication(speakers: Array?, totalVolume: Int) 11 | abstract fun onRemoteAudioStateChanged(uid: String?, state: Int, reason: Int, elapsed: Int) 12 | abstract fun onRemoteVideoStateChanged(uid: String?, state: Int, reason: Int, elapsed: Int) 13 | abstract fun onLocalVideoStateChanged(state: Int, reason: Int) 14 | abstract fun onRtcStats(rtcStats: IRtcEngineEventHandler.RtcStats?) 15 | abstract fun onRtmpStreamingStateChanged(url: String?, state: Int, errCode: Int) 16 | abstract fun onLocalAudioStateChanged(state: Int, reason: Int) 17 | abstract fun onTokenPrivilegeWillExpire() 18 | abstract fun onWarning(code:Int) 19 | abstract fun onConnectionLost() 20 | abstract fun onAudioMixingStateChanged(state: Int, errorCode: Int) 21 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/sdk/RtcMember.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.sdk 2 | 3 | data class RtcMember( 4 | val userId: String, 5 | val userIndex: Int = -1 6 | ) -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/sdk/RtmListener.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.sdk 2 | import org.ar.rtm.* 3 | 4 | abstract class RtmListener : RtmClientListener,RtmChannelListener { 5 | 6 | abstract fun onJoinChannelSuccess(channelId: String?) 7 | 8 | override fun onTokenExpired() { 9 | } 10 | 11 | override fun onPeersOnlineStatusChanged(var1: MutableMap?) { 12 | } 13 | 14 | override fun onConnectionStateChanged(var1: Int, var2: Int) { 15 | } 16 | 17 | abstract fun onP2PMessageReceived(var1: RtmMessage?, var2: String?) 18 | 19 | override fun onAttributesUpdated(var1: MutableList?) { 20 | } 21 | 22 | abstract fun onChannelMessageReceived(var1: RtmMessage?, var2: RtmChannelMember?) 23 | 24 | override fun onMemberJoined(var1: RtmChannelMember?) { 25 | } 26 | 27 | override fun onMemberLeft(var1: RtmChannelMember?) { 28 | } 29 | 30 | override fun onMemberCountUpdated(var1: Int) { 31 | } 32 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/ui/RoomListAdapter.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.ui 2 | 3 | import android.widget.ImageView 4 | import coil.load 5 | import com.chad.library.adapter.base.BaseQuickAdapter 6 | import com.chad.library.adapter.base.viewholder.BaseViewHolder 7 | import io.anyrtc.videolive.R 8 | import io.anyrtc.videolive.api.bean.RoomListBean 9 | import io.anyrtc.videolive.utils.Constans 10 | 11 | class RoomListAdapter :BaseQuickAdapter(R.layout.layout_room_list) { 12 | 13 | 14 | override fun convert(holder: BaseViewHolder, item: RoomListBean.DataBean.ListBean) { 15 | holder.setText(R.id.tv_room_name,item.roomName) 16 | holder.setText(R.id.tv_look_num,"${item.userNum.toString()}人在看") 17 | val imageView = holder.getView(R.id.iv_bg) 18 | imageView.load(item.imageUrl) 19 | } 20 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/ui/activity/AboutActivity.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.ui.activity 2 | 3 | import androidx.appcompat.app.AppCompatActivity 4 | import android.os.Bundle 5 | import io.anyrtc.videolive.R 6 | import io.anyrtc.videolive.databinding.ActivityAboutBinding 7 | import io.anyrtc.videolive.databinding.ActivityHostBinding 8 | 9 | class AboutActivity : BaseActivity() { 10 | 11 | private val binding by lazy { ActivityAboutBinding.inflate(layoutInflater) } 12 | 13 | override fun onCreate(savedInstanceState: Bundle?) { 14 | super.onCreate(savedInstanceState) 15 | setContentView(binding.root) 16 | } 17 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/ui/activity/BaseActivity.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.ui.activity 2 | 3 | import android.os.Bundle 4 | import androidx.appcompat.app.AppCompatActivity 5 | import com.gyf.immersionbar.ImmersionBar 6 | import io.anyrtc.videolive.R 7 | import io.anyrtc.videolive.sdk.RtcManager 8 | 9 | abstract class BaseActivity : AppCompatActivity() { 10 | 11 | 12 | override fun onCreate(savedInstanceState: Bundle?) { 13 | super.onCreate(savedInstanceState) 14 | ImmersionBar.with(this).fitsSystemWindows(true).statusBarColor(R.color.white).statusBarDarkFont( 15 | true 16 | ).navigationBarColor(R.color.white, 0.2f).navigationBarDarkIcon(true).init() 17 | 18 | } 19 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/ui/activity/ChatMessageListAdapter.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.ui.activity 2 | 3 | import android.graphics.Color 4 | import android.text.SpannableString 5 | import android.text.Spanned 6 | import android.text.style.ForegroundColorSpan 7 | import com.chad.library.adapter.base.BaseQuickAdapter 8 | import com.chad.library.adapter.base.viewholder.BaseViewHolder 9 | import io.anyrtc.videolive.R 10 | import io.anyrtc.videolive.api.bean.ChatMessageData 11 | 12 | class ChatMessageListAdapter : 13 | BaseQuickAdapter(R.layout.item_chat) { 14 | 15 | override fun convert(holder: BaseViewHolder, item: ChatMessageData) { 16 | val ss = SpannableString("${item.nickname} ${item.content}") 17 | ss.setSpan( 18 | ForegroundColorSpan(Color.parseColor(if (item.yourself) "#FFBB8D" else "#8DAEFF")), 19 | 0, 20 | item.nickname.length, 21 | Spanned.SPAN_INCLUSIVE_EXCLUSIVE 22 | ) 23 | holder.setText(R.id.message, ss) 24 | } 25 | 26 | override fun addData(data: ChatMessageData) { 27 | super.addData(data) 28 | if (this.data.size > 50) { 29 | this.removeAt(0) 30 | } 31 | recyclerView.scrollToPosition(this.data.size - 1) 32 | } 33 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/ui/activity/HandsUpListAdapter.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.ui.activity 2 | 3 | import android.widget.ImageView 4 | import android.widget.TextView 5 | import coil.load 6 | import com.chad.library.adapter.base.BaseQuickAdapter 7 | import com.chad.library.adapter.base.viewholder.BaseViewHolder 8 | import io.anyrtc.videolive.R 9 | import io.anyrtc.videolive.api.bean.GuestUserInfo 10 | 11 | class HandsUpListAdapter : 12 | BaseQuickAdapter(R.layout.rtc_host_bottom_sheet_item) { 13 | 14 | private companion object { 15 | val obj = Any() 16 | } 17 | 18 | var acceptNum = 0 19 | set(value) { 20 | synchronized(obj) { 21 | if (field >= 3 && value < 3) { 22 | field = value 23 | notifyItemRangeChanged(0, data.size) 24 | } else if (field < 3 && value >= 3) { 25 | field = value 26 | notifyItemRangeChanged(0, data.size) 27 | } else { 28 | field = value 29 | } 30 | } 31 | } 32 | get() { 33 | return synchronized(obj) { 34 | field 35 | } 36 | } 37 | 38 | override fun convert(holder: BaseViewHolder, item: GuestUserInfo) { 39 | holder.getView(R.id.avatar).load(item.avatar) 40 | holder.setText(R.id.nickname, item.nickname) 41 | 42 | holder.setBackgroundResource( 43 | R.id.agree, 44 | if (acceptNum >= 3) R.drawable.rtc_host_bottom_sheet_agree_disabled_bg 45 | else R.drawable.rtc_host_bottom_sheet_agree_bg 46 | ) 47 | } 48 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/ui/activity/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.ui.activity 2 | 3 | import android.animation.ObjectAnimator 4 | import android.os.Bundle 5 | import android.util.Log 6 | import android.view.View 7 | import android.widget.RelativeLayout 8 | import com.google.android.material.bottomnavigation.BottomNavigationView 9 | import com.google.android.material.imageview.ShapeableImageView 10 | import com.gyf.immersionbar.ImmersionBar 11 | import com.kongzue.dialog.util.BaseDialog 12 | import com.kongzue.dialog.v3.CustomDialog 13 | import io.anyrtc.videolive.R 14 | import io.anyrtc.videolive.databinding.ActivityMainBinding 15 | import io.anyrtc.videolive.ui.fragment.HomeFragment 16 | import io.anyrtc.videolive.ui.fragment.MineFragment 17 | import io.anyrtc.videolive.utils.replaceFragment 18 | 19 | class MainActivity : BaseActivity() { 20 | 21 | private val binding by lazy { ActivityMainBinding.inflate(layoutInflater)} 22 | private val fragments by lazy { 23 | arrayListOf(HomeFragment(), MineFragment()) 24 | } 25 | 26 | override fun onCreate(savedInstanceState: Bundle?) { 27 | super.onCreate(savedInstanceState) 28 | setContentView(binding.root) 29 | replaceFragment(fragments[0]) 30 | binding.bottomView.setOnCheckedChangeListener { group, checkedId -> 31 | when(checkedId){ 32 | R.id.rb_home->{ 33 | replaceFragment(fragments[0]) 34 | } 35 | R.id.rb_mine->{ 36 | replaceFragment(fragments[1]) 37 | } 38 | } 39 | } 40 | 41 | } 42 | 43 | 44 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/ui/activity/SplashActivity.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.ui.activity 2 | 3 | import androidx.appcompat.app.AppCompatActivity 4 | import android.os.Bundle 5 | import com.hjq.permissions.Permission 6 | import com.hjq.permissions.XXPermissions 7 | import io.anyrtc.videolive.R 8 | import io.anyrtc.videolive.utils.Interval 9 | import io.anyrtc.videolive.utils.go 10 | import io.anyrtc.videolive.utils.goAndFinish 11 | import io.anyrtc.videolive.utils.toast 12 | import java.util.concurrent.TimeUnit 13 | 14 | class SplashActivity : BaseActivity() { 15 | override fun onCreate(savedInstanceState: Bundle?) { 16 | super.onCreate(savedInstanceState) 17 | setContentView(R.layout.activity_splash) 18 | XXPermissions.with(this).permission(Permission.CAMERA,Permission.RECORD_AUDIO,Permission.WRITE_EXTERNAL_STORAGE) 19 | .request { permissions, all -> 20 | if (all){ 21 | Interval(0, 1, TimeUnit.SECONDS, 1).life(this).finish { 22 | goAndFinish(MainActivity::class.java) 23 | }.start() 24 | }else{ 25 | toast("请开启权限") 26 | finish() 27 | } 28 | } 29 | 30 | } 31 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/utils/Constans.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.utils 2 | 3 | import io.anyrtc.videolive.R 4 | 5 | object Constans { 6 | 7 | const val HTTP_TOKEN = "httpToken" 8 | const val USER_ID = "uId" 9 | const val USER_NAME = "uName" 10 | const val USER_ICON = "avatar" 11 | const val APP_ID = "appId" 12 | const val RTM_TOKEN = "rtmToken" 13 | const val RTC_TOKEN = "rtcToken" 14 | const val ROOM_TYPE = "roomType" 15 | const val ROOM_ID = "roomId" 16 | const val HOST_ID = "hostId" 17 | const val PUSH_URL = "push_url" 18 | const val PULL_URL = "pull_url" 19 | 20 | val firstName = mutableListOf("清蒸","红烧","盐焗","烧烤","水煮","油炸","炖","小炒","干煸","麻辣","爆炒") 21 | val secondName = mutableListOf("西红柿","小龙虾","四季豆","肥牛","土豆","鲍鱼","大闸蟹","辣椒","牛排","鸡翅","鸭脖","鸡蛋") 22 | 23 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/utils/IntervalStatus.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.utils 2 | 3 | /** 4 | * 计时器的状态 5 | */ 6 | enum class IntervalStatus { 7 | STATE_ACTIVE, STATE_IDLE, STATE_PAUSE 8 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/utils/Scope.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2018 Drake, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.anyrtc.videolive.utils 18 | 19 | import android.app.Dialog 20 | import androidx.fragment.app.Fragment 21 | import androidx.fragment.app.FragmentActivity 22 | import androidx.lifecycle.Lifecycle 23 | import androidx.lifecycle.LifecycleOwner 24 | import kotlinx.coroutines.CoroutineDispatcher 25 | import kotlinx.coroutines.CoroutineScope 26 | import kotlinx.coroutines.Dispatchers 27 | 28 | 29 | 30 | 31 | 32 | // 33 | /** 34 | * 异步作用域 35 | * 36 | * 该作用域生命周期跟随整个应用, 注意内存泄漏 37 | */ 38 | fun scope( 39 | dispatcher: CoroutineDispatcher = Dispatchers.Main, 40 | block: suspend CoroutineScope.() -> Unit 41 | ): AndroidScope { 42 | return AndroidScope(dispatcher = dispatcher).launch(block) 43 | } 44 | 45 | fun LifecycleOwner.scopeLife( 46 | lifeEvent: Lifecycle.Event = Lifecycle.Event.ON_DESTROY, 47 | dispatcher: CoroutineDispatcher = Dispatchers.Main, 48 | block: suspend CoroutineScope.() -> Unit 49 | ) = AndroidScope(this, lifeEvent, dispatcher).launch(block) 50 | 51 | fun Fragment.scopeLife( 52 | lifeEvent: Lifecycle.Event = Lifecycle.Event.ON_STOP, 53 | dispatcher: CoroutineDispatcher = Dispatchers.Main, 54 | block: suspend CoroutineScope.() -> Unit 55 | ) = AndroidScope(this, lifeEvent, dispatcher).launch(block) 56 | // 57 | 58 | 59 | 60 | // -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/utils/ScreenUtils.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.utils 2 | 3 | import android.app.Activity 4 | import android.content.res.Resources 5 | 6 | object ScreenUtils { 7 | 8 | fun adapterScreen(activity: Activity, targetDP: Int, isVertical: Boolean) { 9 | val sysDisplayMetrics = Resources.getSystem().displayMetrics 10 | val activityDisplayMetrics = activity.resources.displayMetrics 11 | 12 | if (isVertical) { 13 | activityDisplayMetrics.density = activityDisplayMetrics.heightPixels / targetDP.toFloat() 14 | } else { 15 | activityDisplayMetrics.density = activityDisplayMetrics.widthPixels / targetDP.toFloat() 16 | } 17 | activityDisplayMetrics.scaledDensity = activityDisplayMetrics.density * (sysDisplayMetrics.scaledDensity / sysDisplayMetrics.density) 18 | activityDisplayMetrics.densityDpi = (160 * activityDisplayMetrics.density).toInt() 19 | } 20 | 21 | fun resetScreen(activity: Activity) { 22 | val sysDisplayMetrics = Resources.getSystem().displayMetrics 23 | val appDisplayMetrics = activity.application.resources.displayMetrics 24 | val activityDisplayMetrics = activity.resources.displayMetrics 25 | 26 | activityDisplayMetrics.density = sysDisplayMetrics.density 27 | activityDisplayMetrics.scaledDensity = sysDisplayMetrics.scaledDensity 28 | activityDisplayMetrics.densityDpi = sysDisplayMetrics.densityDpi 29 | 30 | appDisplayMetrics.density = sysDisplayMetrics.density 31 | appDisplayMetrics.scaledDensity = sysDisplayMetrics.scaledDensity 32 | appDisplayMetrics.densityDpi = sysDisplayMetrics.densityDpi 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/utils/SpUtil.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.utils 2 | 3 | import android.content.Context 4 | import android.content.SharedPreferences 5 | 6 | 7 | object SpUtil { 8 | 9 | private lateinit var context:Context 10 | private const val SP_FILE_NAME = "VideoLive" 11 | 12 | fun init(context: Context){ 13 | SpUtil.context = context 14 | } 15 | 16 | fun edit(holdEdit:(SharedPreferences.Editor)->Unit){ 17 | val edit = context.getSharedPreferences(SP_FILE_NAME,Context.MODE_PRIVATE).edit() 18 | holdEdit(edit) 19 | edit.commit() 20 | } 21 | 22 | fun get(): SharedPreferences { 23 | return context.getSharedPreferences(SP_FILE_NAME,Context.MODE_PRIVATE) 24 | } 25 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/view/ChatRecyclerView.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.view 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import androidx.recyclerview.widget.RecyclerView 6 | 7 | class ChatRecyclerView 8 | @JvmOverloads 9 | constructor( 10 | ctx: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 11 | ) : RecyclerView(ctx, attrs, defStyleAttr) { 12 | 13 | override fun getTopFadingEdgeStrength(): Float { 14 | return super.getTopFadingEdgeStrength() 15 | } 16 | 17 | override fun getBottomFadingEdgeStrength() = 0.0f 18 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/view/SmartRefreshRewrite.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.view 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import com.scwang.smart.refresh.layout.SmartRefreshLayout 6 | 7 | class SmartRefreshRewrite 8 | @JvmOverloads 9 | constructor(context: Context, attrs: AttributeSet? = null): SmartRefreshLayout(context, attrs) { 10 | 11 | fun setStateRefresh(notify: Boolean) { 12 | super.setStateRefreshing(notify) 13 | } 14 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/view/videobuilder/DefaultVideoViewParent.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.view.videobuilder 2 | 3 | import android.view.View 4 | 5 | data class DefaultVideoViewParent( 6 | var view: View, 7 | val inGroupIndex: Int, 8 | val yourself: Boolean = false 9 | ) : VideoViewParent -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/view/videobuilder/VideoViewBuilder.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.view.videobuilder 2 | 3 | import android.view.LayoutInflater 4 | 5 | interface VideoViewBuilder { 6 | 7 | fun buildVideoViewParent(viewData: T, layoutInflater: LayoutInflater): T 8 | fun setVideoViewStates(videoViewParent: T, info: D) 9 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/view/videobuilder/VideoViewInterface.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.view.videobuilder 2 | 3 | interface VideoViewParent { 4 | } 5 | 6 | interface VideoViewModel { 7 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/vm/RTCLiveVM.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.vm 2 | 3 | import io.anyrtc.videolive.sdk.RtcManager 4 | import io.anyrtc.videolive.sdk.RtmManager 5 | import org.ar.rtc.Constants 6 | import org.ar.rtm.RtmChannelAttribute 7 | 8 | class RTCLiveVM : BaseLiveVM() { 9 | 10 | override fun messageAcceptLine() { 11 | RtcManager.instance.rtcEngine?.setClientRole(Constants.CLIENT_ROLE_BROADCASTER) 12 | applyRequestResponse.postValue(true) 13 | } 14 | 15 | override fun messageRejectLine() { 16 | applyRequestResponse.postValue(false) 17 | } 18 | 19 | override fun disconnection() { 20 | super.disconnection() 21 | RtcManager.instance.rtcEngine?.setClientRole(Constants.CLIENT_ROLE_AUDIENCE) 22 | } 23 | 24 | override fun onCleared() { 25 | if (isHost) { 26 | RtmManager.instance.setChannelAttribute( 27 | roomId, listOf( 28 | RtmChannelAttribute("musicState", "0"), 29 | RtmChannelAttribute("layout", "1") 30 | ) 31 | ) 32 | } else if (isRequestingApply) { 33 | cancelApply() 34 | } 35 | RtcManager.instance.release() 36 | RtmManager.instance.leaveChannel() 37 | RtmManager.instance.logOut() 38 | } 39 | 40 | fun join() { 41 | RtcManager.instance.joinChannel(rtcToken, roomId, userId, isHost) 42 | RtmManager.instance.joinChannel(roomId) 43 | } 44 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/weight/ItemOffsetsRequestBuilder.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.weight 2 | 3 | /** 4 | * Determine params for [ItemOffsetsCalculator] basing on given RecyclerView layout manager specifics. 5 | */ 6 | open class ItemOffsetsRequestBuilder { 7 | 8 | /** 9 | * Data that describes position of item that offsets are desired, and some of its list layout 10 | * manager params. 11 | */ 12 | data class ItemOffsetsParams( 13 | /* Item data */ 14 | var spanIndex: Int = 0, 15 | var groupIndex: Int = 0, 16 | var spanSize: Int = 1, 17 | /* Layout manager data */ 18 | var spanCount: Int = 1, 19 | var groupCount: Int = 1, 20 | var isLayoutVertical: Boolean = true, 21 | var isLayoutReverse: Boolean = false 22 | ) 23 | 24 | /** 25 | * Fill [offsetsRequest] basing on RecyclerView item and layout params passed by 26 | * [itemOffsetsParams]. All fields of [offsetsRequest] will be set. 27 | */ 28 | open fun fillItemOffsetsRequest(itemOffsetsParams: ItemOffsetsParams, 29 | offsetsRequest: ItemOffsetsCalculator.OffsetsRequest) { 30 | val groupIndexAdjustedToReverse = 31 | if (!itemOffsetsParams.isLayoutReverse) itemOffsetsParams.groupIndex 32 | else itemOffsetsParams.groupCount - itemOffsetsParams.groupIndex - 1 33 | 34 | with (offsetsRequest) { 35 | if (itemOffsetsParams.isLayoutVertical) { 36 | row = groupIndexAdjustedToReverse 37 | col = itemOffsetsParams.spanIndex 38 | 39 | spanSizeH = itemOffsetsParams.spanSize 40 | spanSizeV = 1 41 | 42 | rows = itemOffsetsParams.groupCount 43 | cols = itemOffsetsParams.spanCount 44 | } else { 45 | row = itemOffsetsParams.spanIndex 46 | col = groupIndexAdjustedToReverse 47 | 48 | spanSizeH = 1 49 | spanSizeV = itemOffsetsParams.spanSize 50 | 51 | rows = itemOffsetsParams.spanCount 52 | cols = itemOffsetsParams.groupCount 53 | } 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/java/io/anyrtc/videolive/weight/Spacing.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive.weight 2 | 3 | import android.graphics.Rect 4 | 5 | /** 6 | * Set of offsets available to define for [SpacingItemDecoration]. 7 | */ 8 | data class Spacing( 9 | 10 | /** 11 | * Horizontal offset between every two items, in pixels. 12 | */ 13 | var horizontal: Int = 0, 14 | 15 | /** 16 | * Vertical offset between every two items, in pixels. 17 | */ 18 | var vertical: Int = 0, 19 | 20 | /** 21 | * Set of offsets that can be used to move items from parent edges toward parent's center. 22 | * Think about it like a list view padding. 23 | * Values in pixels are expected. 24 | */ 25 | var edges: Rect = Rect(), 26 | 27 | /** 28 | * Offsets added to each of item edges, in pixels. 29 | */ 30 | var item: Rect = Rect() 31 | ) { 32 | 33 | /** 34 | * Set all spacing to `0`. 35 | */ 36 | fun zero() { 37 | horizontal = 0 38 | vertical = 0 39 | edges.setEmpty() 40 | item.setEmpty() 41 | } 42 | 43 | } -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/anim/loading_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/color/select_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/color/selector_create_text_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 15 | 18 | 21 | 22 | 23 | 24 | 30 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/google.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/google.jpg -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/guest_icon_switch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/guest_icon_switch.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_camera_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_camera_disable.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_chat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_chat.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_download.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_ear_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_ear_disabled.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_ear_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_ear_enabled.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_group.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_leave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_leave.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_menu.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_microphone_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_microphone_disable.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_music.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_relayout_grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_relayout_grid.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_relayout_topic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_relayout_topic.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_switch_camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_switch_camera.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_upload.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_video.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_video_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_video_disable.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_voice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_voice.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_voice_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/host_icon_voice_disable.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_create_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_create_bg.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_faban.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_faban.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_loading.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_mianze.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_mianze.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_mine_top_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_mine_top_bg.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_modify_name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_modify_name.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_name.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_no_room.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_no_room.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_refresh_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_refresh_logo.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_sdk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_sdk.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_splash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_splash_logo.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_version.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_version.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_yinsi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_yinsi.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_zhuce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/img_zhuce.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/tips_icon_camera_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/tips_icon_camera_disabled.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/tips_icon_camera_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/tips_icon_camera_enabled.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/tips_icon_headset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/tips_icon_headset.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/tips_icon_mike_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/tips_icon_mike_disabled.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/tips_icon_mike_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/tips_icon_mike_enabled.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable-xxhdpi/tips_icon_warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/drawable-xxhdpi/tips_icon_warning.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/checkbox_resolution_checked.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/checkbox_resolution_unchecked.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/checkbox_video_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/checkbox_voice_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/img_add.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/img_back.xml: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/img_back_x.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/img_back_x_white.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/img_home.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/img_mine.xml: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/message_input_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 10 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/mike_icon_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 10 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/rtc_host_bottom_sheet_agree_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 10 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/rtc_host_bottom_sheet_agree_disabled_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 10 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/rtc_host_bottom_sheet_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 11 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/rtc_host_bottom_sheet_refuse_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 10 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/rtc_host_group_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/select_room_mode.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/selector_btn_create.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/shape_btn_create_select.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/shape_btn_create_unselect.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/shape_cdn_loading_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 10 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/shape_create_btn.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/shape_create_room_mode.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/shape_et_create_room.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/shape_guest_text_btn_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 10 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/shape_home_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/shape_host_bottom_bar.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 10 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/shape_host_music_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 11 | 12 | 14 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/shape_item_chat_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 10 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/shape_loading_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/shape_mode_normol.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/shape_texture_parent_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 11 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/drawable/shape_toast_tips_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 10 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/layout/activity_about.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 27 | 28 | 40 | 41 | 42 | 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/layout/activity_splash.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 24 | 25 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/layout/dialog_input.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 27 | 28 | 39 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/layout/item_chat.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 21 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/layout/layout_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 13 | 14 | 15 | 16 | 29 | 30 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/layout/layout_modify_name.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/layout/layout_no_room.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 19 | 20 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/layout/layout_room_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 16 | 22 | 25 | 26 | 30 | 31 | 40 | 41 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/layout/rtc_host_queue_sheet.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 21 | 22 | 31 | 32 | 39 | 40 | 46 | 47 | 55 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/layout/toast_tips.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 21 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/menu/tab_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/mipmap-xxhdpi/img_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/app/src/main/res/mipmap-xxhdpi/img_launcher.png -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFBB86FC 4 | #FF6200EE 5 | #FF3700B3 6 | #FF03DAC5 7 | #FF018786 8 | #FF000000 9 | #FFFFFFFF 10 | #091621 11 | #314BFF 12 | 13 | #00000000 14 | 15 | #FF272A 16 | #00FF7A 17 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 视频连麦 3 | 点击播放音乐 4 | 音乐播放中 5 | 同意 6 | 还没有人在申请上麦 7 | 更多 8 | 标清 360P 9 | 高清 540P 10 | 超清 720P 11 | 切换摄像头 12 | 耳反 13 | 等分布局 14 | 大小屏布局 15 | 发送 16 | 输入点什么 17 | 拒绝 18 | 聊天 19 | 上麦 20 | 下麦 21 | 已打开麦克风 22 | 已关闭麦克风 23 | 已打开摄像头 24 | 已关闭摄像头 25 | 请插入有线耳机 26 | 丢包率: 0% 27 | 延时: 0ms 28 | 加载中 29 | 上麦人数已达上限 30 | 视频连麦直播 31 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/values/style.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/values/values.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/main/res/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /VideoLive-Android/app/src/test/java/io/anyrtc/videolive/ExampleUnitTest.kt: -------------------------------------------------------------------------------- 1 | package io.anyrtc.videolive 2 | 3 | import org.junit.Test 4 | 5 | import org.junit.Assert.* 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * See [testing documentation](http://d.android.com/tools/testing). 11 | */ 12 | class ExampleUnitTest { 13 | @Test 14 | fun addition_isCorrect() { 15 | assertEquals(4, 2 + 2) 16 | } 17 | } -------------------------------------------------------------------------------- /VideoLive-Android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | buildscript { 3 | ext.kotlin_version = "1.5.0" 4 | repositories { 5 | mavenCentral() 6 | maven { url 'https://jitpack.io' } 7 | google() 8 | jcenter() 9 | 10 | } 11 | dependencies { 12 | classpath "com.android.tools.build:gradle:4.1.2" 13 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 14 | 15 | 16 | // NOTE: Do not place your application dependencies here; they belong 17 | // in the individual module build.gradle files 18 | } 19 | } 20 | 21 | allprojects { 22 | repositories { 23 | mavenCentral() 24 | maven { url 'https://jitpack.io' } 25 | google() 26 | jcenter() 27 | } 28 | } 29 | 30 | task clean(type: Delete) { 31 | delete rootProject.buildDir 32 | } -------------------------------------------------------------------------------- /VideoLive-Android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app"s APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Automatically convert third-party libraries to use AndroidX 19 | android.enableJetifier=true 20 | # Kotlin code style for this project: "official" or "obsolete": 21 | kotlin.code.style=official -------------------------------------------------------------------------------- /VideoLive-Android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-Android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /VideoLive-Android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu Jun 10 18:52:31 CST 2021 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip 7 | -------------------------------------------------------------------------------- /VideoLive-Android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /VideoLive-Android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | rootProject.name = "VideoLive" -------------------------------------------------------------------------------- /VideoLive-iOS/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/.DS_Store -------------------------------------------------------------------------------- /VideoLive-iOS/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '9.0' 2 | use_frameworks! 3 | 4 | target 'VideoLive-iOS' do 5 | #anyRTC 音视频库 6 | pod 'ARtcKit_iOS', '~> 4.2.2.7' 7 | #anyRTC 实时消息库 8 | pod 'ARtmKit_iOS', '~> 1.0.2.0' 9 | 10 | pod 'SnapKit' 11 | pod 'Alamofire' 12 | pod 'SwiftyJSON', '< 5.0.0' 13 | pod 'MJRefresh' 14 | pod 'SDWebImage', '~> 3.7.3' 15 | pod 'AttributedString' 16 | pod 'SVProgressHUD' 17 | end 18 | 19 | -------------------------------------------------------------------------------- /VideoLive-iOS/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODFILE CHECKSUM: 3d7fc0a2376acf0706dfaf792d8b56143eff090e 2 | 3 | COCOAPODS: 1.11.3 4 | -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/Pods/.DS_Store -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODFILE CHECKSUM: 3d7fc0a2376acf0706dfaf792d8b56143eff090e 2 | 3 | COCOAPODS: 1.11.3 4 | -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Pods.xcodeproj/xcuserdata/a1.xcuserdatad/xcschemes/Pods-VideoLive-iOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 53 | 54 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Pods.xcodeproj/xcuserdata/a1.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Pods-VideoLive-iOS.xcscheme 8 | 9 | isShown 10 | 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Pods.xcodeproj/xcuserdata/yusheng.xcuserdatad/xcschemes/Pods-VideoLive-iOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 53 | 54 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Pods.xcodeproj/xcuserdata/yusheng.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Pods-VideoLive-iOS.xcscheme 8 | 9 | isShown 10 | 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Target Support Files/Pods-VideoLive-iOS/Pods-VideoLive-iOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Target Support Files/Pods-VideoLive-iOS/Pods-VideoLive-iOS-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Target Support Files/Pods-VideoLive-iOS/Pods-VideoLive-iOS-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Target Support Files/Pods-VideoLive-iOS/Pods-VideoLive-iOS-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_VideoLive_iOS : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_VideoLive_iOS 5 | @end 6 | -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Target Support Files/Pods-VideoLive-iOS/Pods-VideoLive-iOS-frameworks-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-VideoLive-iOS/Pods-VideoLive-iOS-frameworks.sh 2 | ${PODS_ROOT}/ARtcKit_iOS/ARtcKit.framework 3 | ${PODS_ROOT}/ARtmKit_iOS/ARtmKit/ARtmKit.framework 4 | ${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework 5 | ${BUILT_PRODUCTS_DIR}/AttributedString/AttributedString.framework 6 | ${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework 7 | ${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework 8 | ${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework 9 | ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework 10 | ${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Target Support Files/Pods-VideoLive-iOS/Pods-VideoLive-iOS-frameworks-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ARtcKit.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ARtmKit.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AttributedString.framework 5 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework 6 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework 7 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework 8 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework 9 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Target Support Files/Pods-VideoLive-iOS/Pods-VideoLive-iOS-frameworks-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-VideoLive-iOS/Pods-VideoLive-iOS-frameworks.sh 2 | ${PODS_ROOT}/ARtcKit_iOS/ARtcKit.framework 3 | ${PODS_ROOT}/ARtmKit_iOS/ARtmKit/ARtmKit.framework 4 | ${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework 5 | ${BUILT_PRODUCTS_DIR}/AttributedString/AttributedString.framework 6 | ${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework 7 | ${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework 8 | ${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework 9 | ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework 10 | ${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Target Support Files/Pods-VideoLive-iOS/Pods-VideoLive-iOS-frameworks-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ARtcKit.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ARtmKit.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AttributedString.framework 5 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework 6 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework 7 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework 8 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework 9 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Target Support Files/Pods-VideoLive-iOS/Pods-VideoLive-iOS-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_VideoLive_iOSVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_VideoLive_iOSVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Target Support Files/Pods-VideoLive-iOS/Pods-VideoLive-iOS.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 6 | PODS_ROOT = ${SRCROOT}/Pods 7 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 8 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 9 | -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Target Support Files/Pods-VideoLive-iOS/Pods-VideoLive-iOS.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_VideoLive_iOS { 2 | umbrella header "Pods-VideoLive-iOS-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /VideoLive-iOS/Pods/Target Support Files/Pods-VideoLive-iOS/Pods-VideoLive-iOS.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 6 | PODS_ROOT = ${SRCROOT}/Pods 7 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 8 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 9 | -------------------------------------------------------------------------------- /VideoLive-iOS/README.md: -------------------------------------------------------------------------------- 1 | ## 项目说明 2 | 3 | 本demo演示了如何使用 anyRTC 音视频服务来实现音视频直播的场景,demo中使用的restful api 为该demo的业务服务,开发者可以先使用我们的业务服务,跑通demo,熟悉业务流程,以及SDK的使用步骤,后续在集成的时候,需要结合自身的业务服务。 4 | 5 | > demo中使用的开发者信息:为我们的测试开发者信息,开发者在集成项目的时候,需要使用自己的开发者信息,该demo中的开发者信息,会随时删除不可用。 6 | 7 | ## 主要功能 8 | 9 | 1、实时直播:主播、观众、连麦用户都是拉取实时流:低延迟直播,延迟 200ms 左右。 10 | 11 | 2、客户端推流到CDN:主播加入RTC后,把本地的音视频进行转协议直播出去,当有人连麦后本地合流后直播出去。连麦用户为观众转换而来,在没连麦的时候,使用播放器播放flv直播流,连麦的时候,关闭播放器,使用RTC发布实时流,并拉取主播的实时流。观众使用播放器播放flv的直播流。 12 | 13 | 3、服务端推流到CDN:主播加入RTC后,调用接口告知服务,让服务端把当前房间直播出去,当有人连麦或者连麦挂断后,通知服务端更新直播布局;连麦用户为观众转换而来,在没连麦的时候,使用播放器播放flv直播流,连麦的时候,关闭播放器,使用RTC发布实时流,并拉取主播的实时流。观众使用播放器播放flv的直播流。 14 | 15 | 上述3中直播方式可以满足市面上各种各样的直播场景,也可以根据自己的场景来用上述方式: 16 | 17 | - 如果预算比较低,想要直播连麦的,可以使用**客户端推流到CDN**的形式 18 | - 如果设备比较老,性能差,想要直播连麦的,可以使用**服务端推流到CDN**的形式 19 | - 如果对实时性比较高的,使用**实时直播**的方式 20 | 21 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS.xcodeproj/project.xcworkspace/xcuserdata/a1.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS.xcodeproj/project.xcworkspace/xcuserdata/a1.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS.xcodeproj/xcuserdata/a1.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | VideoLive-iOS.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 10 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 639BC718267C2E6E00DF365B 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS.xcodeproj/xcuserdata/yusheng.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | VideoLive-iOS.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS.xcworkspace/xcuserdata/a1.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS.xcworkspace/xcuserdata/a1.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS.xcworkspace/xcuserdata/a1.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS.xcworkspace/xcuserdata/yusheng.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS.xcworkspace/xcuserdata/yusheng.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/.DS_Store -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/ARBaseNavigationController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ARBaseNavigationController.swift 3 | // VideoLive-iOS 4 | // 5 | // Created by 余生丶 on 2021/06/18. 6 | // 7 | 8 | import UIKit 9 | 10 | class ARBaseNavigationController: UINavigationController { 11 | override func viewDidLoad() { 12 | super.viewDidLoad() 13 | 14 | // Do any additional setup after loading the view. 15 | if #available(iOS 15.0, *) { 16 | let appearance = UINavigationBarAppearance() 17 | appearance.configureWithTransparentBackground() 18 | // appearance.configureWithOpaqueBackground() 19 | appearance.backgroundColor = UIColor.white 20 | navigationBar.standardAppearance = appearance 21 | navigationBar.scrollEdgeAppearance = navigationBar.standardAppearance 22 | } else { 23 | // Fallback on earlier versions 24 | } 25 | } 26 | 27 | override var childForStatusBarStyle: UIViewController? { 28 | return topViewController 29 | } 30 | 31 | /* 32 | // MARK: - Navigation 33 | 34 | // In a storyboard-based application, you will often want to do a little preparation before navigation 35 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 36 | // Get the new view controller using segue.destination. 37 | // Pass the selected object to the new view controller. 38 | } 39 | */ 40 | } 41 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // VideoLive-iOS 4 | // 5 | // Created by 余生丶 on 2021/6/18. 6 | // 7 | 8 | import UIKit 9 | import SVProgressHUD 10 | 11 | @main 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 17 | // Override point for customization after application launch. 18 | SVProgressHUD.setDefaultStyle(.light) 19 | SVProgressHUD.setDefaultMaskType(.black) 20 | SVProgressHUD.setShouldTintImages(false) 21 | SVProgressHUD.setMinimumSize(CGSize.init(width: 120, height: 120)) 22 | 23 | Thread.sleep(forTimeInterval: 0.5) 24 | return true 25 | } 26 | 27 | } 28 | 29 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/.DS_Store -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-1024.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-167@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-167@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-20.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-20@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-20@2x-1.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-20@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-20@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small-1.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/AppIcon.appiconset/Icon@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/.DS_Store -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_add.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_add@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_add@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_add.imageset/icon_add@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_add.imageset/icon_add@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_add.imageset/icon_add@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_add.imageset/icon_add@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_appversion.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_appversion@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_appversion@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_appversion.imageset/icon_appversion@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_appversion.imageset/icon_appversion@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_appversion.imageset/icon_appversion@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_appversion.imageset/icon_appversion@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_audio.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_audio@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_audio@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_audio.imageset/icon_audio@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_audio.imageset/icon_audio@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_audio.imageset/icon_audio@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_audio.imageset/icon_audio@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_audio_close.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_audio_close@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_audio_close@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_audio_close.imageset/icon_audio_close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_audio_close.imageset/icon_audio_close@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_audio_close.imageset/icon_audio_close@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_audio_close.imageset/icon_audio_close@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_back@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_back@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back.imageset/icon_back@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back.imageset/icon_back@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back.imageset/icon_back@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back.imageset/icon_back@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back0.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_back0@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_back0@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back0.imageset/icon_back0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back0.imageset/icon_back0@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back0.imageset/icon_back0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back0.imageset/icon_back0@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_back1@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_back1@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back1.imageset/icon_back1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back1.imageset/icon_back1@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back1.imageset/icon_back1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back1.imageset/icon_back1@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_back2@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_back2@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back2.imageset/icon_back2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back2.imageset/icon_back2@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back2.imageset/icon_back2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back2.imageset/icon_back2@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_back3@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_back3@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back3.imageset/icon_back3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back3.imageset/icon_back3@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back3.imageset/icon_back3@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back3.imageset/icon_back3@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_back4@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_back4@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back4.imageset/icon_back4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back4.imageset/icon_back4@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back4.imageset/icon_back4@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back4.imageset/icon_back4@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_back5@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_back5@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back5.imageset/icon_back5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back5.imageset/icon_back5@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back5.imageset/icon_back5@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_back5.imageset/icon_back5@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_chat.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_chat@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_chat@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_chat.imageset/icon_chat@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_chat.imageset/icon_chat@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_chat.imageset/icon_chat@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_chat.imageset/icon_chat@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_close.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_close@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_close@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_close.imageset/icon_close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_close.imageset/icon_close@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_close.imageset/icon_close@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_close.imageset/icon_close@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_ear.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_ear@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_ear@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_ear.imageset/icon_ear@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_ear.imageset/icon_ear@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_ear.imageset/icon_ear@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_ear.imageset/icon_ear@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_ear_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_ear_selected@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_ear_selected@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_ear_selected.imageset/icon_ear_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_ear_selected.imageset/icon_ear_selected@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_ear_selected.imageset/icon_ear_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_ear_selected.imageset/icon_ear_selected@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_edit.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_edit@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_edit@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_edit.imageset/icon_edit@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_edit.imageset/icon_edit@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_edit.imageset/icon_edit@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_edit.imageset/icon_edit@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_exit.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_exit@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_exit@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_exit.imageset/icon_exit@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_exit.imageset/icon_exit@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_exit.imageset/icon_exit@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_exit.imageset/icon_exit@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_green.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_green@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_green@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_green.imageset/icon_green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_green.imageset/icon_green@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_green.imageset/icon_green@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_green.imageset/icon_green@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_hangup.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_hangup@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_hangup@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_hangup.imageset/icon_hangup@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_hangup.imageset/icon_hangup@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_hangup.imageset/icon_hangup@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_hangup.imageset/icon_hangup@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_head.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_head@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_head@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_head.imageset/icon_head@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_head.imageset/icon_head@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_head.imageset/icon_head@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_head.imageset/icon_head@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_launch.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_launch@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_launch@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_launch.imageset/icon_launch@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_launch.imageset/icon_launch@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_launch.imageset/icon_launch@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_launch.imageset/icon_launch@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_loading.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_loading@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_loading@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_loading.imageset/icon_loading@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_loading.imageset/icon_loading@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_loading.imageset/icon_loading@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_loading.imageset/icon_loading@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_loadings.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_loadings@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_loadings@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_loadings.imageset/icon_loadings@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_loadings.imageset/icon_loadings@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_loadings.imageset/icon_loadings@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_loadings.imageset/icon_loadings@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_lock.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_lock@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_lock@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_lock.imageset/icon_lock@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_lock.imageset/icon_lock@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_lock.imageset/icon_lock@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_lock.imageset/icon_lock@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_log.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_log@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_log@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_log.imageset/icon_log@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_log.imageset/icon_log@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_log.imageset/icon_log@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_log.imageset/icon_log@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_logo@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_logo@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_logo.imageset/icon_logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_logo.imageset/icon_logo@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_logo.imageset/icon_logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_logo.imageset/icon_logo@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_more@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_more@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more.imageset/icon_more@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more.imageset/icon_more@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more.imageset/icon_more@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more.imageset/icon_more@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more_equal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_more_equal@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_more_equal@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more_equal.imageset/icon_more_equal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more_equal.imageset/icon_more_equal@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more_equal.imageset/icon_more_equal@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more_equal.imageset/icon_more_equal@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more_switch.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_more_switch@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_more_switch@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more_switch.imageset/icon_more_switch@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more_switch.imageset/icon_more_switch@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more_switch.imageset/icon_more_switch@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more_switch.imageset/icon_more_switch@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more_unequal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_more_unequal@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_more_unequal@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more_unequal.imageset/icon_more_unequal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more_unequal.imageset/icon_more_unequal@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more_unequal.imageset/icon_more_unequal@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_more_unequal.imageset/icon_more_unequal@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_music.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_music@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_music@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_music.imageset/icon_music@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_music.imageset/icon_music@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_music.imageset/icon_music@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_music.imageset/icon_music@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_red.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_red@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_red@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_red.imageset/icon_red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_red.imageset/icon_red@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_red.imageset/icon_red@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_red.imageset/icon_red@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_refresh.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_refresh@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_refresh@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_refresh.imageset/icon_refresh@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_refresh.imageset/icon_refresh@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_refresh.imageset/icon_refresh@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_refresh.imageset/icon_refresh@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_register.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_register@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_register@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_register.imageset/icon_register@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_register.imageset/icon_register@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_register.imageset/icon_register@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_register.imageset/icon_register@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_sdkversion.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_sdkversion@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_sdkversion@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_sdkversion.imageset/icon_sdkversion@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_sdkversion.imageset/icon_sdkversion@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_sdkversion.imageset/icon_sdkversion@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_sdkversion.imageset/icon_sdkversion@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_switch.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_switch@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_switch@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_switch.imageset/icon_switch@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_switch.imageset/icon_switch@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_switch.imageset/icon_switch@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_switch.imageset/icon_switch@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_time.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_time@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_time@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_time.imageset/icon_time@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_time.imageset/icon_time@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_time.imageset/icon_time@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_time.imageset/icon_time@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_audio_close.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_tip_audio_close@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_tip_audio_close@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_audio_close.imageset/icon_tip_audio_close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_audio_close.imageset/icon_tip_audio_close@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_audio_close.imageset/icon_tip_audio_close@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_audio_close.imageset/icon_tip_audio_close@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_audio_open.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_tip_audio_open@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_tip_audio_open@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_audio_open.imageset/icon_tip_audio_open@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_audio_open.imageset/icon_tip_audio_open@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_audio_open.imageset/icon_tip_audio_open@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_audio_open.imageset/icon_tip_audio_open@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_head.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_tip_head@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_tip_head@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_head.imageset/icon_tip_head@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_head.imageset/icon_tip_head@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_head.imageset/icon_tip_head@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_head.imageset/icon_tip_head@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_video_close.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_tip_video_close@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_tip_video_close@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_video_close.imageset/icon_tip_video_close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_video_close.imageset/icon_tip_video_close@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_video_close.imageset/icon_tip_video_close@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_video_close.imageset/icon_tip_video_close@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_video_open.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_tip_video_open@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_tip_video_open@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_video_open.imageset/icon_tip_video_open@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_video_open.imageset/icon_tip_video_open@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_video_open.imageset/icon_tip_video_open@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_video_open.imageset/icon_tip_video_open@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_warning.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_tip_warning@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_tip_warning@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_warning.imageset/icon_tip_warning@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_warning.imageset/icon_tip_warning@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_warning.imageset/icon_tip_warning@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_tip_warning.imageset/icon_tip_warning@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_video.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_video@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_video@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_video.imageset/icon_video@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_video.imageset/icon_video@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_video.imageset/icon_video@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_video.imageset/icon_video@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_video_close.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_video_close@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_video_close@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_video_close.imageset/icon_video_close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_video_close.imageset/icon_video_close@2x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_video_close.imageset/icon_video_close@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Assets.xcassets/resource/icon_video_close.imageset/icon_video_close@3x.png -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Common/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Common/.DS_Store -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Common/Category/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Common/Category/.DS_Store -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Common/Category/VideoLive-iOS-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import "UIAlertController+Blocks.h" 6 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | 视频互动连麦 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 19 | CFBundleShortVersionString 20 | $(MARKETING_VERSION) 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | ITSAppUsesNonExemptEncryption 24 | 25 | LSRequiresIPhoneOS 26 | 27 | NSAppTransportSecurity 28 | 29 | NSAllowsArbitraryLoads 30 | 31 | 32 | NSCameraUsageDescription 33 | 视频互动连麦请求访问麦克风用于视频通话? 34 | NSMicrophoneUsageDescription 35 | 视频互动连麦请求访问麦克风用于语音交流? 36 | UIApplicationSupportsIndirectInputEvents 37 | 38 | UIBackgroundModes 39 | 40 | audio 41 | 42 | UILaunchStoryboardName 43 | LaunchScreen 44 | UIMainStoryboardFile 45 | Main 46 | UIRequiredDeviceCapabilities 47 | 48 | armv7 49 | 50 | UISupportedInterfaceOrientations 51 | 52 | UIInterfaceOrientationPortrait 53 | 54 | UISupportedInterfaceOrientations~ipad 55 | 56 | UIInterfaceOrientationPortrait 57 | UIInterfaceOrientationPortraitUpsideDown 58 | UIInterfaceOrientationLandscapeLeft 59 | UIInterfaceOrientationLandscapeRight 60 | 61 | UIUserInterfaceStye 62 | Light 63 | UIViewControllerBasedStatusBarAppearance 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Settings/ARStatementViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ARStatementViewController.swift 3 | // VideoLive-iOS 4 | // 5 | // Created by 余生丶 on 2021/6/22. 6 | // 7 | 8 | import UIKit 9 | 10 | class ARStatementViewController: UIViewController { 11 | override func viewDidLoad() { 12 | super.viewDidLoad() 13 | 14 | // Do any additional setup after loading the view. 15 | self.navigationItem.leftBarButtonItem = createBarButtonItem(title: "产品免责声明") 16 | } 17 | 18 | override func viewWillAppear(_ animated: Bool) { 19 | super.viewWillAppear(animated) 20 | removeLogoImage() 21 | } 22 | 23 | override func viewWillDisappear(_ animated: Bool) { 24 | super.viewWillDisappear(animated) 25 | addLogoImage() 26 | } 27 | 28 | /* 29 | // MARK: - Navigation 30 | 31 | // In a storyboard-based application, you will often want to do a little preparation before navigation 32 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 33 | // Get the new view controller using segue.destination. 34 | // Pass the selected object to the new view controller. 35 | } 36 | */ 37 | } 38 | -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Video/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/VideoLive-iOS/VideoLive-iOS/Video/.DS_Store -------------------------------------------------------------------------------- /VideoLive-iOS/VideoLive-iOS/Video/LogViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LogViewController.swift 3 | // AudioLive-iOS 4 | // 5 | // Created by 余生丶 on 2021/3/9. 6 | // 7 | 8 | import AttributedString 9 | import UIKit 10 | 11 | struct ARLogModel { 12 | var userName: String? 13 | var uid: String? 14 | var text: String? 15 | } 16 | 17 | class LogCell: UITableViewCell { 18 | @IBOutlet var contentLabel: UILabel! 19 | @IBOutlet var colorView: UIView! 20 | 21 | override func awakeFromNib() { 22 | super.awakeFromNib() 23 | colorView.layer.cornerRadius = 12.25 24 | } 25 | 26 | func update(logModel: ARLogModel) { 27 | var userName = logModel.userName 28 | (userName == nil) ? userName = "" : nil 29 | if logModel.uid == UserDefaults.string(forKey: .uid) { 30 | contentLabel.attributed.text = """ 31 | \(logModel.userName ?? "", .foreground(UIColor(hexString: "#FFBB8D"))) \(logModel.text ?? "", .foreground(UIColor.white)) 32 | """ 33 | } else { 34 | contentLabel.attributed.text = """ 35 | \(logModel.userName ?? "", .foreground(UIColor(hexString: "#8DAEFF"))) \(logModel.text ?? "", .foreground(UIColor.white)) 36 | """ 37 | } 38 | } 39 | } 40 | 41 | class LogViewController: UITableViewController { 42 | private lazy var list = [ARLogModel]() 43 | 44 | override func viewDidLoad() { 45 | super.viewDidLoad() 46 | tableView.rowHeight = UITableView.automaticDimension 47 | tableView.estimatedRowHeight = 44 48 | } 49 | 50 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 51 | return list.count 52 | } 53 | 54 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 55 | let cell = tableView.dequeueReusableCell(withIdentifier: "LogCell", for: indexPath) as! LogCell 56 | cell.update(logModel: list[indexPath.row]) 57 | return cell 58 | } 59 | } 60 | 61 | extension LogViewController { 62 | func log(logModel: ARLogModel) { 63 | DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.25) { 64 | self.list.append(logModel) 65 | let index = IndexPath(row: self.list.count - 1, section: 0) 66 | self.tableView.insertRows(at: [index], with: .automatic) 67 | self.tableView.scrollToRow(at: index, at: .middle, animated: false) 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /audience.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/audience.png -------------------------------------------------------------------------------- /effect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/effect.png -------------------------------------------------------------------------------- /host.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/host.png -------------------------------------------------------------------------------- /native_to_cdn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyRTC-UseCase/VideoLive/8c3aa2803acf653eff2bc3441e3d913d5f2ec371/native_to_cdn.png --------------------------------------------------------------------------------