agoraio / agorartcengine_ios Goto Github PK
View Code? Open in Web Editor NEWiOS Package for Agora Video RTE SDK. Perfect for video calls and live streaming.
Home Page: https://agoraio.github.io/AgoraRtcEngine_iOS/
License: MIT License
iOS Package for Agora Video RTE SDK. Perfect for video calls and live streaming.
Home Page: https://agoraio.github.io/AgoraRtcEngine_iOS/
License: MIT License
The prompt message is
Class HWDarwinResamplerImpl is implemented in both /private/var/containers/Bundle/Application/…/Frameworks/AgoraSpatialAudioExtension.framework/AgoraSpatialAudioExtension (0x10baa4e28) and /private/var/containers/Bundle/Application/…/Frameworks/AgoraAudioBeautyExtension.framework/AgoraAudioBeautyExtension (0x1096999a8). One of the two will be used. Which one is undefined.
There are more instances of duplicated classes compared to using 4.1.1.
After upgrading to version 4.2.2, this is the only one.
Currently I am using Agora SDK for Audio/Video call. I am not getting call when app is not running. What I need to added to get audio/video call in background or app not running.
In ReactNative
Pod install is sooooo slow.
the SDK url : HERE
To Reproduce
Steps to reproduce the behavior:
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):
Smartphone (please complete the following information):
Additional context
Add any other context about the problem here.
To initialize the agora kit engine I need to call this method on the client side:
AgoraRtcEngineKit.sharedEngine(withAppId: APP_ID, delegate: self)
But what if I want to store my APP_ID on the server side, and not send it to the client side in order to protect my API keys?
Can it be achieved?
pod 'AgoraRtcEngine_iOS', '3.4.6'
it is crash log,fix it crash as soon as possible please
Incident Identifier: 26E3AC45-0652-4AD4-90AD-47A23066D12E
Hardware Model: iPhone9,3
Process: Xxxxx [4467]
Path: /private/var/containers/Bundle/Application/87D8A3F0-7485-4D7E-9DA6-90212FC35208/Xxxxx.app/Xxxxx
Identifier: XXXX
Version: 4.6.0 (3691)
AppStoreTools: 13F15
AppVariant: 1:iPhone9,3:15
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Coalition: XXXX [722]
Date/Time: 2022-05-25 00:29:45.5173 +0530
Launch Time: 2022-05-25 00:25:49.6514 +0530
OS Version: iPhone OS 15.3.1 (19D52)
Release Type: User
Baseband Version: 6.01.01
Report Version: 104
Exception Type: EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: FRONTBOARD 2343432205
<RBSTerminateContext| domain:10 code:0x8BADF00D explanation:[application:4467] failed to terminate gracefully after 5.0s
ProcessVisibility: Unknown
ProcessState: Running
WatchdogEvent: process-exit
WatchdogVisibility: Background
WatchdogCPUStatistics: (
"Elapsed total CPU time (seconds): 22.100 (user 22.100, system 0.000), 100% CPU",
"Elapsed application CPU time (seconds): 1.069, 5% CPU"
) reportType:CrashLog maxTerminationResistance:Interactive>
Triggered by Thread: 0
Thread 0 name:
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x00000001bb7754f0 __psynch_cvwait + 8
1 libsystem_pthread.dylib 0x00000001dbc9bbfc pthread_cond_wait$VARIANT$mp + 1216 (pthread_cond.c:636)
2 AgoraCore 0x000000010c09b9d0 0x10c090000 + 47568
3 AgoraCore 0x000000010c09ba8c 0x10c090000 + 47756
4 AgoraCore 0x000000010c09bc1c ahpl_main_exit_wait + 28
5 AgoraRtcKit 0x000000010c44bfe8 agora::base::IAgoraService::release() + 48
6 AgoraRtcKit 0x000000010c4e3b08 0x10c1d4000 + 3209992
7 Xxxxx 0x0000000107b81030 AgoraLiveManager.destroyAgoraEngine(:) + 228 (AgoraLiveManager.swift:657)
8 Xxxxx 0x00000001078de4cc LiveAgoraPusher.destroyEngine() + 92 (LiveAgoraPusher.swift:240)
9 Xxxxx 0x00000001078df71c protocol witness for XxxxxLivePusher.destroyEngine() in conformance LiveAgoraPusher + 36 (:0)
10 Xxxxx 0x0000000105dc61bc BroadcastController.destoryAgoraLiveManager(ignoreVoiceDevice:) + 560 (BroadcastController.swift:3448)
11 Xxxxx 0x0000000105db8fa0 BroadcastController.stopBroadcast(reason:_:) + 688 (BroadcastController.swift:3972)
12 Xxxxx 0x0000000105d73af8 BroadcastController.progressStopBroadcast(breaked:reasonCode:reason:tostText:) + 508 (BroadcastController.swift:3779)
13 Xxxxx 0x0000000105da1924 0x104b28000 + 19372324
14 Xxxxx 0x0000000105dcbb04 closure #1 in BroadcastController.confirmStopBroadcast() + 156 (BroadcastController.swift:3751)
15 Xxxxx 0x0000000106a2429c 0x104b28000 + 32490140
16 UIKitCore 0x0000000183a69510 -[UIAlertController _invokeHandlersForAction:] + 108 (UIAlertController.m:1219)
17 UIKitCore 0x000000018400cfdc __103-[UIAlertController _dismissAnimated:triggeringAction:triggeredByPopoverDimmingView:dismissCompletion:]_block_invoke.454 + 28 (UIAlertController.m:1384)
18 UIKitCore 0x0000000183cab854 -[UIPresentationController transitionDidFinish:] + 1256 (UIPresentationController.m:521)
19 UIKitCore 0x00000001841b6ff0 __56-[UIPresentationController runTransitionForCurrentState]_block_invoke.437 + 208 (UIPresentationController.m:1193)
20 UIKitCore 0x0000000183b4fd08 -[_UIViewControllerTransitionContext completeTransition:] + 112 (UIViewControllerTransitioning.m:289)
21 UIKitCore 0x0000000183bcf61c -[UIViewAnimationBlockDelegate _didEndBlockAnimation:finished:context:] + 688 (UIView.m:14898)
22 UIKitCore 0x0000000183aa3478 -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 244 (UIView.m:0)
23 UIKitCore 0x0000000183ab6d68 -[UIViewAnimationState animationDidStop:finished:] + 240 (UIView.m:2280)
24 UIKitCore 0x0000000183ab6ebc -[UIViewAnimationState animationDidStop:finished:] + 580 (UIView.m:2299)
25 QuartzCore 0x0000000185195e64 CA::Layer::run_animation_callbacks(void*) + 276 (CALayer.mm:7203)
26 libdispatch.dylib 0x000000018131b1a8 _dispatch_client_callout + 16 (object.m:560)
27 libdispatch.dylib 0x00000001812c75e0 _dispatch_main_queue_callback_4CF$VARIANT$mp + 940 (inline_internal.h:2601)
28 CoreFoundation 0x000000018160a888 CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE + 12 (CFRunLoop.c:1795)
29 CoreFoundation 0x00000001815c8188 __CFRunLoopRun + 2528 (CFRunLoop.c:3144)
30 CoreFoundation 0x00000001815dae1c CFRunLoopRunSpecific + 572 (CFRunLoop.c:3268)
31 GraphicsServices 0x00000001a197d9a0 GSEventRunModal + 160 (GSEvent.c:2200)
32 UIKitCore 0x0000000183e0eb90 -[UIApplication _run] + 1080 (UIApplication.m:3493)
33 UIKitCore 0x0000000183ba416c UIApplicationMain + 332 (UIApplication.m:5047)
34 Xxxxx 0x0000000104d2cd50 0x104b28000 + 2116944
35 dyld 0x000000010bd3c250 start + 444 (dyldMain.cpp:879)
Subject: We need to incorporate the xcprivacy manifest into our app . Starting March 13, Apple will send notifications when uploading builds to the App Store, and this will become mandatory from May 1. All the SDKs used in our app needs to incorporate the xcprivacy manifest.
Reference: https://developer.apple.com/news/?id=3d8a9yyh
Actions needed: We need the compatible xcprivacy manifest version IOS SDK with xcprivacy manifest. We are expecting a seamless upgrade by upgrading to the latest version.
According to the iOS PIP document, I try to draw the CVPixelBuffer on AVSampleBufferLayer to set PIP up.
by this function I did make the remote view displayed on the AVSampleBufferLayer on the foreground mode.
- (void)setRemoteVideoRenderer:(id<AgoraVideoSinkProtocol> _Nullable)videoRenderer forUserId:(NSUInteger)userId;
When I swap the app into background mode, I could hear the audio but can't get the CVPixelBuffer by:
# AgoraVideoSinkProtocol
func renderPixelBuffer(_ pixelBuffer: CVPixelBuffer, rotation: AgoraVideoRotation) {}
Is there anyway to get CVPixelBuffer on the background mode?
Looks to be a typo in AgoraRtcChannelMediaOptions
.
publishTrancodedVideoTrack
should be publishTranscodedVideoTrack
Hello!
I work on an application where users can watch streams and simultaneously be in video call with other users.
I use Agora library for this and all call-related stuff works really well. The issue that I have is that after starting or joining to call and changing AVAudioSession
mode and category, stream audio volume changes to really low.
Technical context:
Agora settings:
agoraEngine = AgoraRtcEngineKit.sharedEngine(with: configuration, delegate: self)
agoraEngine.setAudioSessionOperationRestriction(.all)
agoraEngine.setChannelProfile(.liveBroadcasting)
agoraEngine.setClientRole(.broadcaster)
...
agoraEngine.enableVideo()
agoraEngine.enableAudio()
agoraEngine.setDefaultAudioRouteToSpeakerphone(true)
agoraEngine.setChannelProfile(.liveBroadcasting)
agoraEngine.setClientRole(.broadcaster)
let option = AgoraRtcChannelMediaOptions()
option.clientRoleType = .broadcaster
option.channelProfile = .liveBroadcasting
option.autoSubscribeAudio = true
option.autoSubscribeVideo = true
...
agoraEngine.enableLocalVideo(true)
agoraEngine.enableLocalAudio(true)
agoraEngine.muteLocalAudioStream(false)
agoraEngine.muteLocalVideoStream(false)
AVAudioSession settings:
Basically to provide the best audio experience app sets AVAudioSession
while watching stream to:
try? AVAudioSession.sharedInstance().setMode(.default)
try? AVAudioSession.sharedInstance().setCategory(
.playback, options: [.mixWithOthers, .defaultToSpeaker, .allowBluetooth]
)
When Agora call is active app sets AVAudioSession
to:
try? AVAudioSession.sharedInstance().setMode(.videoChat)
try? AVAudioSession.sharedInstance().setCategory(
.playAndRecord, options: [.mixWithOthers, .defaultToSpeaker, .allowBluetooth]
)
After switching AVAudioSession
to videoChat
and playAndRecord
stream audio changes to really low, but Agora call audio is normal. Both - Agora audio signal volume (adjustPlaybackSignalVolume
) and steam player volume are set to 100%. Device audio volume is also set to 100%.
Am I missing something?
Should I set the AVAudioSession settings differently?
Does Agora lib have ability to set the audio mix ratio between a call volume and another audio source that uses AVAudioSession?
We are attempting to access audio frames when using Agora, however this delegate function doesn't seem to be getting called.
We are correctly setting the delegate method, as true is returned from: (BOOL)setAudioFrameDelegate:(id<AgoraAudioFrameDelegate> _Nullable)delegate
.
Some delegate methods are called as expected, such as getObservedAudioFrame()
and getRecordAudioParams()
, however onRecordAudioFrame
is never called.
Describe the bug
I have used Agora Audio SDK and then received a call when the application was open it works perfectly
when I receive calls using VoIP notifications I can't get the sender's voice and the sender can't get my
I don't get any error regarding this
Example of issue
https://github.com/AgoraIO/AgoraRtcEngine_iOS/assets/44164918/5b970b6b-67ab-4bb5-90cb-b0350d3d8481
pod 'AgoraRtcEngine_iOS'
Device: [e.g. iPhonexr, iPhone8]
OS: [e.g. 17.01]
We're using Agora via SPM inside our own Swift Package. Everything works fine when building against an Intel simulator (or ARM via Rosetta so essentially still Intel slices being used).
I currently have version 3.6.0
installed, and am using an original M1 Mac.
I can get our module to build fine with an ARM mac now, however I get the following runtime exception raised when running our tests (the same exact tests run fine on an Intel sim as mentioned above).
2021-12-22 11:54:22.154052+0000 xctest[28689:14921151] The bundle “communications-iosTests” couldn’t be loaded. Try reinstalling the bundle.
2021-12-22 11:54:22.154115+0000 xctest[28689:14921151] (dlopen(/Users/gileswilliams/Library/Developer/Xcode/DerivedData/communications-ios-bmapwkopjukqudgasfpodnuirigz/Build/Products/Debug-iphonesimulator/communications-iosTests.xctest/communications-iosTests, 0x0109): Library not loaded: @rpath/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension
Referenced from: /Users/gileswilliams/Library/Developer/Xcode/DerivedData/communications-ios-bmapwkopjukqudgasfpodnuirigz/Build/Products/Debug-iphonesimulator/communications-iosTests.xctest/communications-iosTests
Reason: tried: '/Users/gileswilliams/Library/Developer/Xcode/DerivedData/communications-ios-bmapwkopjukqudgasfpodnuirigz/Build/Products/Debug-iphonesimulator/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' (code signature in <93DDD9CC-45A2-3EDF-A101-AE8857F427BD> '/Users/gileswilliams/Library/Developer/Xcode/DerivedData/communications-ios-bmapwkopjukqudgasfpodnuirigz/Build/Products/Debug-iphonesimulator/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' not valid for use in process: Trying to load an unsigned library), '/Users/gileswilliams/Library/Developer/Xcode/DerivedData/communications-ios-bmapwkopjukqudgasfpodnuirigz/Build/Products/Debug-iphonesimulator/PackageFrameworks/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' (no such file), '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/swift/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' (no such file), '/usr/lib/swift/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' (no such file), '/Users/gileswilliams/Library/Developer/Xcode/DerivedData/communications-ios-bmapwkopjukqudgasfpodnuirigz/Build/Products/Debug-iphonesimulator/communications-iosTests.xctest/Frameworks/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' (no such file), '/Users/gileswilliams/Library/Developer/Xcode/DerivedData/communications-ios-bmapwkopjukqudgasfpodnuirigz/Build/Products/Debug-iphonesimulator/communications-iosTests.xctest/../Frameworks/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' (no such file), '/Users/gileswilliams/Library/Developer/Xcode/DerivedData/communications-ios-bmapwkopjukqudgasfpodnuirigz/Build/Products/Debug-iphonesimulator/communications-iosTests.xctest/Frameworks/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' (no such file), '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/swift/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' (no such file), '/usr/lib/swift/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' (no such file), '/Users/gileswilliams/Library/Developer/Xcode/DerivedData/communications-ios-bmapwkopjukqudgasfpodnuirigz/Build/Products/Debug-iphonesimulator/communications-iosTests.xctest/Frameworks/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' (no such file), '/Users/gileswilliams/Library/Developer/Xcode/DerivedData/communications-ios-bmapwkopjukqudgasfpodnuirigz/Build/Products/Debug-iphonesimulator/communications-iosTests.xctest/../Frameworks/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' (no such file), '/Users/gileswilliams/Library/Developer/Xcode/DerivedData/communications-ios-bmapwkopjukqudgasfpodnuirigz/Build/Products/Debug-iphonesimulator/communications-iosTests.xctest/Frameworks/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' (no such file), '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Agents/../../Frameworks/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' (no such file), '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Agents/../../PrivateFrameworks/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' (no such file), '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Agents/../../../usr/lib/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' (no such file), '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks/AgoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' (no such file))
Program ended with exit code: 83
I'm attempting to join multiple channels on a shared AgoraRtcEngineKit
instance. After joining the channel with role audience
and then switching the client role to broadcaster
and then back to audience
, the camera seems to remain on as indicated by the green dot on the iphone. I was wondering if there is a different way to release the camera in the multi-channel setup, or if this could be a bug in the SDK
Code for joining channel:
let option = AgoraRtcChannelMediaOptions()
option.channelProfile = .liveBroadcasting
option.clientRoleType = .audience
option.autoSubscribeVideo = true
option.autoSubscribeAudio = true
option.publishCameraTrack = true
option.publishMicrophoneTrack = true
option.publishSecondaryCameraTrack = true
let token = token
let channel = channel
var result = agoraKit.joinChannelEx(
byToken: token,
connection: AgoraRtcConnection(channelId: channel, localUid: id),
delegate: delegate,
mediaOptions: option
)
Code for switching roles:
let newOptions = AgoraRtcChannelMediaOptions()
newOptions.channelProfile = .liveBroadcasting
newOptions.clientRoleType = role
newOptions.autoSubscribeVideo = true
newOptions.autoSubscribeAudio = true
newOptions.publishCameraTrack = true
newOptions.publishMicrophoneTrack = true
newOptions.publishSecondaryCameraTrack = true
agoraKit.updateChannelEx(with: newOptions, connection: AgoraRtcConnection(channelId: channel, localUid: id))
I also tried using muteLocalVideoStreamEx
but that didn't work
Hello!
I've been having this problem where when I start a channel, my camera icon is not appearing, only when another user joins in the channel, for some reason my user camera appears:
my code:
ScrollView(.vertical, showsIndicators: false) {
VStack(spacing: .zero) {
ForEach(Array(users), id: \.self) { uid in
AgoraVideoCanvasView(manager: dependencies.watchPartyScene.getManager(), uid: uid)
.aspectRatio(contentMode: .fit)
.cornerRadius(2.ds.quants)
.clipShape(Circle())
.allowsHitTesting(false)
}
}
.padding(4.ds.quants)
}
and I add users and remove them using the delegates:
public override func rtcEngine(_ engine: AgoraRtcEngineKit, didJoinedOfUid uid: UInt, elapsed: Int) {
var users = allUsers
users.insert(uid)
userUpdate.send(users)
}
public override func rtcEngine(_ engine: AgoraRtcEngineKit, didOfflineOfUid uid: UInt, reason: AgoraUserOfflineReason) {
userUpdate.send(allUsers)
}
AgoraRtcEngine_iOS
one of my project for video calling. I am facing the below scenario.Scenario:
didAudioRouteChanged
function implemented. In this stage I get this result from SDK. didAudioRouteChanged -> AgoraAudioOutputRouting(rawValue: 5)
didAudioRouteChanged -> AgoraAudioOutputRouting(rawValue: 3)
didAudioRouteChanged -> AgoraAudioOutputRouting(rawValue: 5)
NB: I have tried this, but not worked.
agoraEngine.setAudioProfile(AudioProfile.default)
agoraEngine.setAudioScenario(AudioScenario.gameStreaming)
Please help me to solve this problem. I really appreciate any help you can provide. 😊 😊
Hi! I am trying to push AgoraVideoFrame with pushExternalVideoFrame,
but it crashes after 5-10 seconds with EXC_BAD_ACCESS.
CODE:
let outputImage = image.applyingFilter("CIBlendWithMask", parameters: parameters)
let pixelBuffer = outputImage.toPixelBuffer(cgSize: UIScreen.main.bounds.size)!let videoFrame = AgoraVideoFrame()
videoFrame.format = 12
videoFrame.textureBuf = pixelBuffer
videoFrame.time = timeStamp
videoFrame.rotation = Int32(90)
self.agoraKit?.pushExternalVideoFrame(videoFrame)
ERROR:
Thread 40: EXC_BAD_ACCESS (code=1, address=0x5e5922c7fab0)
I am using MTKView and MetalRenderer, and get filtered image to convert to pixelBuffer.
It does works fine before crash, I have confirmed the AgoraVideoFrame are properly sent and displayed on the other device.
If I need to provide other informations, I am happy to do so.
Thank you in advance!
Hey all,
Are there any plans to reduce the binary frameworks' size? It seems to me the sizes are way too large.
Currently seeing AgoraRTCKit at ~430MB
and BeQuic at 130MB
.
Thanks.
需求:用户唱歌的时候要加混响音效,耳返也要加上混响。
目前情况:修改录音原始数据后,送到远端的有混响音效效果。唱歌的人耳返没有效果。
修改数据时间点: onRecordAudioFrame 回调里面直接修改Buff数据
SDK版本号:3.1.1
SPM’s Version doc says a package version needs to be “a three period-separated integer, for example 1.0.0". That implies that 3.5.0.1 is not a valid package version.
If I enter 3.5.0.1 as the minimum package version in Xcode, Done is grayed out:
Xcode's Swift Packages > Update to Latest Package Versions also does not recognize the existence of v3.5.0.1. It resolves to v3.5.0 instead.
Describe the bug
iOS Cannot receive stream message when using realtime transcription feature
Expected behavior
Receive Stream Message when enable Realtime Transcription Feature
Smartphone (please complete the following information):
Hi, many thanks for this library and whole work around it.
We've experienced random crashes from our users when app is in background for a while, I report more details here:
Used SPM Version:
repositoryURL = "https://github.com/AgoraIO/AgoraRtcEngine_iOS";
requirement = {
kind = upToNextMinorVersion;
minimumVersion = 3.7.0;
};
Model: iPhone 13 Pro
RAM free: 790.48 MB
Disk free: 4.61 GB
Operating System Version:16.0.2
Jailbroken:No
Log:
Crashed: ahpl_main
EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x000000000000001d
Crashed: ahpl_main
0 AgoraRtcKit 0x34c06c (Missing UUID e18e97fdcb2835b9b2c6dc2918fe37cf)
1 AgoraRtcKit 0x4b6a78 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 586060
2 AgoraRtcKit 0x4b7274 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 588104
3 AgoraRtcKit 0x4b3ab8 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 573836
4 AgoraRtcKit 0x4b37d0 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 573092
5 AgoraRtcKit 0x4cff90 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 689764
6 AgoraRtcKit 0x5b06ec agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 1609152
7 AgoraRtcKit 0x36fa84 (Missing UUID e18e97fdcb2835b9b2c6dc2918fe37cf)
8 AgoraRtcKit 0x550fdc agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 1218224
9 AgoraRtcKit 0x5a334c agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 1554976
10 AgoraRtcKit 0x4a73c8 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 522908
11 AgoraRtcKit 0x4a7394 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 522856
12 AgoraRtcKit 0x34bce4 (Missing UUID e18e97fdcb2835b9b2c6dc2918fe37cf)
13 AgoraRtcKit 0x34b4e0 (Missing UUID e18e97fdcb2835b9b2c6dc2918fe37cf)
14 AgoraRtcKit 0x5a6928 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 1568764
15 AgoraRtcKit 0x394424 (Missing UUID e18e97fdcb2835b9b2c6dc2918fe37cf)
16 AgoraRtcKit 0x3943b4 (Missing UUID e18e97fdcb2835b9b2c6dc2918fe37cf)
17 AgoraRtcKit 0x394348 (Missing UUID e18e97fdcb2835b9b2c6dc2918fe37cf)
18 AgoraRtcKit 0x5a3e1c agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 1557744
19 AgoraRtcKit 0x685c40 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 2482964
20 AgoraRtcKit 0x681ef0 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 2467268
21 AgoraRtcKit 0x683fd0 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 2475684
22 AgoraRtcKit 0x6580c0 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 2295700
23 AgoraRtcKit 0x66a2c0 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 2369940
24 AgoraRtcKit 0x638f44 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 2168344
25 AgoraRtcKit 0x63bf90 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 2180708
26 AgoraRtcKit 0x65c544 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 2313240
27 AgoraRtcKit 0x35a5f0 (Missing UUID e18e97fdcb2835b9b2c6dc2918fe37cf)
28 AgoraRtcKit 0x449d18 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 140268
29 AgoraRtcKit 0x4482c8 agora::rtc::IMediaRecorder::getMediaRecorder(agora::rtc::IRtcEngine*, agora::rtc::IMediaRecorderObserver*) + 133532
30 AgoraRtcKit 0x39506c (Missing UUID e18e97fdcb2835b9b2c6dc2918fe37cf)
31 AgoraRtcKit 0x3958b4 (Missing UUID e18e97fdcb2835b9b2c6dc2918fe37cf)
32 AgoraCore 0x957c ahpl_so_register + 1928
33 AgoraCore 0x75e4 ahpl_os_rename + 1660
34 AgoraCore 0xbaf8 ahpl_mpq_timer_arg + 1008
35 AgoraCore 0xdc3c ahpl_mpq_loop + 200
36 AgoraCore 0xd174 ahpl_perf_set_callback + 2160
37 AgoraCore 0x18080 ahpl_profile_clear_registered + 2488
38 libsystem_pthread.dylib 0x16cc _pthread_start + 148
39 libsystem_pthread.dylib 0xba4 thread_start + 8
Have had CI issues pulling the official pod download link being flaky. Would it be possible to add a podspec so this can be used instead?
Describe the bug
impact for all of my unit test, no such module AgoraRtcKit
To Reproduce
Steps to reproduce the behavior:
Referenced from: <C4BD9BAA-6BCD-3BD0-B571-F26D7B9A8DAC> /Users/diiyo/Library/Developer/Xcode/DerivedData/Perqara-cnhuypusaxncxcborxzzqcvcvuag/Build/Products/Debug-iphonesimulator/AthenaiOSTests.xctest/AthenaiOSTests
Reason: tried: '/Users/diiyo/Library/Developer/Xcode/DerivedData/Perqara-cnhuypusaxncxcborxzzqcvcvuag/Build/Products/Debug-iphonesimulator/AgoraRtcKit.framework/AgoraRtcKit' (code signature in <1E33CDC3-97F3-3750-8053-8705789E9E2E> '/Users/diiyo/Library/Developer/Xcode/DerivedData/Perqara-cnhuypusaxncxcborxzzqcvcvuag/Build/Products/Debug-iphonesimulator/AgoraRtcKit.framework/AgoraRtcKit' not valid for use in process: Trying to load an unsigned library), '/Users/diiyo/Library/Developer/Xcode/DerivedData/Perqara-cnhuypusaxncxcborxzzqcvcvuag/Build/Products/Debug-iphonesimulator/PackageFrameworks/AgoraRtcKit.framework/AgoraRtcKit' (no such file), '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks/AgoraRtcKit.framework/AgoraRtcKit' (no such file)
I tried to use this framework in my SPM project, but this error came our: product 'AgoraRtcKit' required by package 'PROJECT_NAME' target 'TARGET_NAME' not found.
My Package.swift file is like this:
let package = Package(
name: "PROJECT_NAME",
platforms: [.iOS(.v13)],
products: [.library(name: "LIBRARY_NAME", targets: ["TARGET_NAME"])],
dependencies: [
.package(url: "https://github.com/AgoraIO/AgoraRtcEngine_iOS.git", from: "3.7.0"),
],
targets: [
.target(
name: "TARGET_NAME",
dependencies: [
"AgoraRtcKit",
]
),
.testTarget(name: "PROJECT_NAME", dependencies: ["PROJECT_NAME"]),
],
swiftLanguageVersions: [.v5]
)
How can I fix this error?
Title says it all.
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_AgoraRtcAudioVolumeInfo", referenced from:
objc-class-ref in LiveRoom+Extension.o
"_OBJC_CLASS_$_AgoraRtcEngineKit", referenced from:
objc-class-ref in AgoraManager.o
ld: symbol(s) not found for architecture arm64
What are the differences between creating an AgoraRtcEngineKit in this way:
agoraKit = AgoraRtcEngineKit.sharedEngine(withAppId: APP_ID, delegate: self)
To this way:
agoraKit = AgoraRtcEngineKit()
The reason I am asking is that I want to avoid providing an APP_ID when creating an AgoraRtcEngine.
pushExternalVideoFrame returns false although the setExternalVideoSource is set to true.
Normal AgoraCameraSourcePush method does works, but when I switch to my custom push, it fails.
What could be causing this?
Is there any way that I can see a log?
func updateClientRole(_ role: AgoraClientRole) {
print("updateClientRole,", role.title)
self.role = role
if role == .broadcaster {
makeConfig(mirror: false)
agoraKit.enableLocalVideo(true)
agoraKit.enableLocalAudio(true)
agoraKit.enableAudioVolumeIndication(250, smooth: 3, report_vad: true)
agoraKit.setAudioProfile(.speechStandard, scenario: .communication)
agoraKit.setExternalVideoSource(true, useTexture: true, pushMode: true)
// this works
localVideoView = CustomVideoSourcePreview(frame: view.frame)
videosView.appendBackgroundViewContainer(uid: myUID, itsTeacher: self.amTeacher).addSubview(localVideoView!)
customCamera = AgoraCameraSourcePush(delegate: self, videoView: localVideoView!)
self.customCamera?.startCapture(ofCamera: .front)
self.localVideoView?.bindFrameToSuperviewBounds()
// this does not work
let myVideoView = videosView.appendBackgroundViewContainer(uid: myUID, itsTeacher: self.amTeacher)
avatarView = MyAvatarView(to: myVideoView)
avatarView?.delegate = self
}
func myVideoCapture(_ capture: AgoraCameraSourcePush?, didOutputSampleBuffer pixelBuffer: CVPixelBuffer, rotation: Int, timeStamp: CMTime) {
let videoFrame = AgoraVideoFrame()
videoFrame.format = 12
videoFrame.textureBuf = pixelBuffer
videoFrame.time = timeStamp
videoFrame.rotation = Int32(rotation)
let success = agoraKit?.pushExternalVideoFrame(videoFrame)
print("myVideoCapture.success",success) -> this print "myVideoCapture.success Optional(false)"
}
Describe the bug
Getting error when compiling the app
Building for iOS Simulator, but linking in dylib built for iOS, file 'agoraAIDenoiseExtension.framework/AgoraAIDenoiseExtension' for architecture arm64
To Reproduce
Compile app in xcode 15 beta
Expected behavior
It should compile fine
Smartphone (please complete the following information):
hey! could i get some guidance on how to convert an AgoraAudioFrame into a CMSampleBuffer containing that audio? it doesn't look like any of your examples cover it
i imagine it looks something like this:
var formatDescription: CMAudioFormatDescription?
let bytes = (audioFrame.bytesPerSample / 8) * channelsPerFrame
formatDescription = AudioStreamBasicDescription(mSampleRate: audioFrame.samplesPerSec, mFormatID: kAudioFormatLinearPCM, mFormatFlags: kAudioFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked, mBytesPerPacket: audioFrame.bytesPerSample, mFramesPerPacket: 1, mBytesPerFrame: audioFrame.bytesPerSample, mChannelsPerFrame: audioFrame.channels, mBitsPerChannel: <#T##UInt32#>, mReserved: <#T##UInt32#>)
var result = CMAudioFormatDescriptionCreate(allocator: kCFAllocatorDefault, asbd: <#T##UnsafePointer<AudioStreamBasicDescription>#>, layoutSize: <#T##Int#>, layout: <#T##UnsafePointer<AudioChannelLayout>?#>, magicCookieSize: <#T##Int#>, magicCookie: <#T##UnsafeRawPointer?#>, extensions: <#T##CFDictionary?#>, formatDescriptionOut: <#T##UnsafeMutablePointer<CMAudioFormatDescription?>#>)
but i'm not really sure
Getting this error :
dyld[30739]: Library not loaded: '@rpath/AgoraJNDExtension.framework/AgoraJNDExtension'
Library not loaded: '@rpath/AgoraJNDExtension.framework/AgoraJNDExtension'
Hey! i'm trying to depend on the swift package from an Objective-C target, i can build and run fine, but when i try to archive the project, i get an error saying
i'm not sure what i'm doing wrong, in my Objective-C target i've tried to follow what you do in your iOS examples in my .m
file:
i've tried changing my project settings, to no effect. I've set SWIFT_INSTALL_OBJC_HEADER
to NO, and added a User Header search path of "$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts/include"
.
is this a problem you're aware of? do you have any idea how i might be including Agora incorrectly
I want the RtcEngine to use the AVCaptureDevice.DeviceType.builtInUltraWideCamera
when streaming video to the user.
I noticed the AgoraVideoViewer SDK has this ability.
How do I accomplish this with the AgoraRtcEngine?
Mute the users local audio stream so that it is not published to the channel and use AVAudioRecorder
to detect the users speaking volume locally.
Calling muteLocalAudioStream(true)
successfully stops publishing the audio stream to the channel, but AVAudioRecorder
stops receiving local audio data which is unexpected. In the documentation it states:
However this is not the observed behavior. Calling muteLocalAudioStream(true)
seems to disable the devices microphone access.
The objective of the code below is to start recording a users local audio using AVAudioRecorder
after the current user joins a channel.
public class _AgoraClient: NSObject, AgoraRtcEngineDelegate {
private let appId: String
private let recorderUrl: URL
private var agora: AgoraRtcEngineKit!
private var recorder: AVAudioRecorder?
private var timer: Timer?
public init(appId: String) {
self.appId = appId
self.recorderUrl = FileManager.default
.urls(for: .documentDirectory, in: .userDomainMask)[0]
.appendingPathComponent("local_volume.m4a")
super.init()
agora = AgoraRtcEngineKit.sharedEngine(withAppId: appId, delegate: self)
}
deinit {
leave()
agora = nil
stopRecorder()
AgoraRtcEngineKit.destroy()
}
// MARK: AgoraRtcEngineDelegate
public func rtcEngine(_ engine: AgoraRtcEngineKit, didLeaveChannelWith stats: AgoraChannelStats) {
stopRecorder()
}
// MARK: Agora
func join(uid: UInt, channel: String, token: String, muted: Bool, forceMuted: Bool, volume: Bool) {
agora.joinChannel(byToken: token, channelId: channel, info: nil, uid: uid) { [weak self] _ in
self?.agora.enableLocalAudio(true)
self?.startRecorder()
}
}
func leave() {
agora.leaveChannel(nil)
}
func setMute(shouldMute: Bool) {
print("MUTE AGORA: \(shouldMute)")
agora.muteLocalAudioStream(shouldMute)
}
// MARK: AVAudioRecorder
func startRecorder() {
let settings = [
AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
AVSampleRateKey: 12000,
AVNumberOfChannelsKey: 1,
AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
]
do {
let session = AVAudioSession.sharedInstance()
try session.setCategory(.playAndRecord, options: .mixWithOthers)
try session.setActive(true)
let recorder = try AVAudioRecorder(url: recorderUrl, settings: settings)
recorder.isMeteringEnabled = true
recorder.prepareToRecord()
recorder.record()
let timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { _ in
recorder.updateMeters()
let volume = Int(recorder.averagePower(forChannel: 0))
print("RECORDER - volume \(volume)")
})
self.recorder = recorder
self.timer = timer
print("RECORDER - started")
} catch {
print(error)
}
}
func stopRecorder() {
timer?.invalidate()
recorder?.stop()
recorder?.deleteRecording()
recorder = nil
print("RECORDER - stopped")
}
}
AVAudioRecorder
prints the correct volume levels.agora.muteLocalAudioStream(true)
is called the volume measured using AVAudioRecorder
starts emitting -120 which is not expected.agora.muteLocalAudioStream(false)
is called the volume measured using AVAudioRecorder
starts printing the correct volume levels again.RECORDER - started
RECORDER - volume -63
RECORDER - volume -61
RECORDER - volume -64
RECORDER - volume -46
RECORDER - volume -64
RECORDER - volume -34
RECORDER - volume -41
RECORDER - volume -14
RECORDER - volume -51
RECORDER - volume -67
RECORDER - volume -67
MUTE AGORA: true
RECORDER - volume -91
RECORDER - volume -120
RECORDER - volume -120
RECORDER - volume -120
RECORDER - volume -120
RECORDER - volume -120
RECORDER - volume -120
RECORDER - volume -120
RECORDER - volume -120
RECORDER - volume -120
RECORDER - volume -120
RECORDER - volume -120
MUTE AGORA: false
RECORDER - volume -62
RECORDER - volume -66
RECORDER - volume -11
RECORDER - volume -9
RECORDER - volume -47
RECORDER - volume -43
RECORDER - volume -68
RECORDER - volume -66
RECORDER - volume -72
RECORDER - volume -60
RECORDER - volume -69
RECORDER - volume -70
Am I misinterpreting the documentation and this is actually the expected behavior?
If so, then what is the difference between enableLocalAudio
vs. muteLocalAudioStream
?
Is there another approach I should look into to achieve the stated objective?
Thanks for making this! We were finally able to dump Cocoapods.
There are a few warnings when using this package, should be easy to fix:
AgoraRtcKit.framework/Headers/AgoraRtcEngineKit.h:3340:35: Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)
AgoraRtcKit.framework/Headers/AgoraRtcEngineKit.h:3340:35: Insert '_Nullable' if the pointer may be null
AgoraRtcKit.framework/Headers/AgoraRtcEngineKit.h:3340:35: Insert '_Nonnull' if the pointer should never be null
AgoraRtcKit.framework/Headers/AgoraRtcEngineKit.h:3593:67: Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)
AgoraRtcKit.framework/Headers/AgoraRtcEngineKit.h:3593:67: Insert '_Nullable' if the pointer may be null
AgoraRtcKit.framework/Headers/AgoraRtcEngineKit.h:3593:67: Insert '_Nonnull' if the pointer should never be null
There's also this one (building with Xcode 13b1, not sure about 12.5.1):
AgoraRtcEngine_iOS/Package.swift The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 15.0.99.
If you guys actually still support iOS 8.0, then I don't think there's much that can be done. But if you don't support iOS 8, then perhaps this can be changed?
Thanks!
rtcEngine(_ engine: AgoraRtcEngineKit, didOccurError
used to be reported with AgoraErrorCodeNoPermission
, but since I updated recently, that error no longer occurs.
Our app depends on
(Note: we are updating from an old version of Agora (back from Nov, 2021))
LocalModule.Package has this:
.package(
name: "AgoraRtcKit", // We also tried omitting this optional var
url: "https://github.com/AgoraIO/AgoraRtcEngine_iOS",
from: "4.1.1"
)
And I added "AgoraRtcKit" to the list of dependencies
dependencies: [
"REDACTED",
"REDACTED",
"REDACTED",
"AgoraRtcKit", // << Here
"REDACTED",
"REDACTED",
.product(name: "REDACTED", package: "REDACTED"),
.product(name: "REDACTED", package: "REDACTED"),
.product(name: "REDACTED", package: "REDACTED"),
.product(name: "REDACTED", package: "REDACTED"),
.product(name: "REDACTED", package: "REDACTED")
]
And this simply won't load the package.
I see AgoraKitRtc
in my resolved package dependencies, but it is unable to add it as a dependency of our target :(
Error: product 'AgoraRtcKit' required by package 'localmodule' target 'REDACTED' not found.
The way our app is architected, we can't add via xcode. Can someone help me get this working through this LocalModule.Package?
Currently, I'm facing the issue of connecting Agorasdk on the app's killed state. I have integrated the call kit through VoIP push notification. So, I can receive calls on the app killed state. But I don't know how to connect the AgoraSDK in the app's closed state. Any one help me?
Starting this morning my CI has started throwing errors when trying to install your SDK:
Downloading Pods/AgoraRtcEngine_iOS/AgoraRtcKit.xcframework/ios-arm64_armv7/AgoraRtcKit.framework/AgoraRtcKit (326 MB)
Error downloading object: Pods/AgoraRtcEngine_iOS/AgoraRtcKit.xcframework/ios-arm64_armv7/AgoraRtcKit.framework/AgoraRtcKit (d233218): Smudge error: Error downloading Pods/AgoraRtcEngine_iOS/AgoraRtcKit.xcframework/ios-arm64_armv7/AgoraRtcKit.framework/AgoraRtcKit (d23321862cff3e5270bbb98b0d48d6caf55086521d28103587a6e689c86fd4c3): batch response: This repository is over its data quota. Account responsible for LFS bandwidth should purchase more data packs to restore access.
Errors logged to '/Users/vagrant/git/.git/lfs/logs/20230512T181804.526821.log'.
Use `git lfs logs last` to view the log.
error: external filter 'git-lfs filter-process' failed
fatal: Pods/AgoraRtcEngine_iOS/AgoraRtcKit.xcframework/ios-arm64_armv7/AgoraRtcKit.framework/AgoraRtcKit: smudge filter lfs failed
Hello, today we've started to see the problem with installing your lib via Swift Package Manager.
It hangs out on the following screen and blocks several teammates to build our Xcode project.
"Reset Package Caches" doesn't help.
Installing on empty project has the same problem.
Installing previous versions has the same problem.
Looks like your lib binary is unavailable.
Thanks in advance for any advices how to resolve/bypass this.
Describe the bug
I have used Agora Audio SDK and then received a call when the application was open it works perfectly
when I receive calls using VoIP notifications I can't get the sender's voice and the sender can't get my
I don't get any error regarding this
Video
Working example
Example of issue
https://github.com/AgoraIO/AgoraRtcEngine_iOS/assets/44164918/5b970b6b-67ab-4bb5-90cb-b0350d3d8481
While am upgrading my SDK to 4.1.6 from 3.7.0. Am getting below error
Incorrect NSStringEncoding value 0x8000100 detected. Assuming NSASCIIStringEncoding. Will stop this compatibility mapping behavior in the near future
Also audience side video streaming is not working when we broadcast from native mobile app. Its working fine when broadcast from web
Environment
Xcode version: Xcode 13.1
SDK version: 3.0.0
Installation method: Swift Package Manager
Problem
This dependency shows the following warning in Xcode 13.1 when integrating AgoraRtcKit using Swift Package Manager:
The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 15.0.99.
objc[1250]: Class HWDarwinResamplerImpl is implemented in both /private/var/containers/Bundle/Application/FB9ED148-D29C-40C5-B15D-3C14D419AE52/Venting.app/Frameworks/AgoraSpatialAudioExtension.framework/AgoraSpatialAudioExtension (0x107aecd18) and /private/var/containers/Bundle/Application/FB9ED148-D29C-40C5-B15D-3C14D419AE52/Venting.app/Frameworks/AgoraAudioBeautyExtension.framework/AgoraAudioBeautyExtension (0x105659940). One of the two will be used. Which one is undefined.
To Reproduce
Steps to reproduce the behavior:
Happen when the app will run
Expected behavior
we can't publish voice and get voice from other devices
SDK:- 4.1.1
Which is the latest voice call example?
Is there any plan to support Mac catalyst build?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.