AgoraIO-Extensions / AgoraIO-Extensions/Agora-Flutter-SDK
Camera infinity focus not working android flutter.
- Lingua principale
- Dart
- Stelle
- 795
- Fork
- 448
- Merge medio
- 12h 19m
- PR unite (30g)
- 14
Descrizione
I'm try to set infinity camera focus in my flutter android app but it is alway take nearest object to focus but i want to remove focus functionality or set to infinity focus but it's not working. i have also try with native code but only show the front camera. but agora give this functionality so why it's not working? i'm sharing the my code so please check anything i have do wrong in my code.
`
/// Initialize Agora Engine
Future initAgora() async {
try {
// Request permissions
await [Permission.camera,Permission.microphone,].request();
// Create Agora RTC Engine
agoraEngine = createAgoraRtcEngine();
sid = "";
resourceIdAgora = "";
// Initialize engine
await agoraEngine!.initialize(RtcEngineContext(
appId: agoraAppId,
channelProfile: ChannelProfileType.channelProfileLiveBroadcasting,
));
await agoraEngine!.setVideoEncoderConfiguration(
//2k
VideoEncoderConfiguration(
dimensions: VideoDimensions(
width: 2560,
height: 1440,
),
frameRate: 30,
bitrate: 5000, // 5 Mbps
minBitrate: 3000, // Minimum 3 Mbps
orientationMode: OrientationMode.orientationModeFixedLandscape,
degradationPreference: DegradationPreference.maintainResolution,
),
);
// Enable video
await agoraEngine!.enableVideo();
// Start preview
await agoraEngine!.startPreview(sourceType: VideoSourceType.videoSourceCamera);
await agoraEngine!.switchCamera();
await agoraEngine!.setCameraCapturerConfiguration(
CameraCapturerConfiguration(
cameraDirection: CameraDirection.cameraRear,
),
);
//remove all audio permission
await agoraEngine!.enableLocalAudio(false);
await agoraEngine!.disableAudio();
await agoraEngine!.stopAudioRecording();
await agoraEngine!.stopLocalAudioMixer();
await agoraEngine!.muteAllRemoteAudioStreams(true);
await agoraEngine!.muteLocalAudioStream(true);
// Register event handler
agoraEngine!.registerEventHandler(
RtcEngineEventHandler(
onJoinChannelSuccess: (RtcConnection connection, int elapsed) {
isLive.value = true;
statusMessage.value = 'Successfully joined channel';
CCPrint(name: "CheckChannel", value: "onJoinChannelSuccess");
Future.delayed(Duration(seconds: 1), () {
callAgoraAcquireAPI();
});
},
onUserJoined: (RtcConnection connection, int remoteUid, int elapsed) {
CCPrint(name: "CheckChannel", value: "onUserJoined ${remoteUid}");
statusMessage.value = 'Viewer joined: $remoteUid';
},
onUserOffline: (RtcConnection connection, int remoteUid,
UserOfflineReasonType reason) {
statusMessage.value = 'Viewer left: $remoteUid';
},
onLeaveChannel: (RtcConnection connection, RtcStats stats) {
isLive.value = false;
statusMessage.value = 'Broadcast ended';
},
onError: (ErrorCodeType err, String msg) {
if(err.toString().contains("errTokenExpired")){
CCFirebaseService.broadcastStartStop(isStart: false);
}
statusMessage.value = 'Error: $err - $msg';
},
onLocalAudioStateChanged: (connection,state,error){
CCPrint(name: "CheckAudioState", value: "${state}");
}
),
);
// statusMessage.value = 'Agora initialized successfully';
} catch (e) {
statusMessage.value = 'Initialization error: $e';
CCPrint(name: "CheckError Error_initialize", value: "${e}");
}
}
/// Go Live as Broadcaster
Future goLive({String? channelName, String? agoraToken}) async {
try {
ConnectionStateType state = await agoraEngine!.getConnectionState();
if (state == ConnectionStateType.connectionStateConnected) {
CCPrint(name: "CheckConnectState", value: "connectionStateConnected");
CCFirebaseService.broadcastStartStop(isStart: true);
}else if(state == ConnectionStateType.connectionStateConnecting){
CCPrint(name: "CheckConnectState", value: "connectionStateConnecting");
}else if(state == ConnectionStateType.connectionStateDisconnected){
CCPrint(name: "CheckConnectState", value: "connectionStateDisconnected");
statusMessage.value = 'Connecting to channel...';
// Disable auto-focus and set to infinity
await agoraEngine!.setCameraAutoFocusFaceModeEnabled(false);
// Set focus to far distance (closest to infinity in Agora)
await Future.delayed(Duration(milliseconds: 500));
// Set infinity focus
await agoraEngine!.setCameraFocusPositionInPreview(positionX: 0, positionY: 0);
/* List parameterOptions = [
'{"che.video.camera_capture_focus_mode": 0}',
'{"che.video.enable_forced_focus": true}',
];
for (String param in parameterOptions) {
await agoraEngine!.setParameters(param);
await Future.delayed(Duration(milliseconds: 200));
}*/
// remove all audio permission
await agoraEngine!.enableLocalAudio(false);
await agoraEngine!.disableAudio();
await agoraEngine!.stopAudioRecording();
await agoraEngine!.stopLocalAudioMixer();
await agoraEngine!.muteAllRemoteAudioStreams(true);
await agoraEngine!.muteLocalAudioStream(true);
await agoraEngine!.enableLocalAudio(true);
await agoraEngine!.muteLocalAudioStream(true); // keeps audio track but muted
await agoraEngine!.setClientRole(
role: ClientRoleType.clientRoleBroadcaster,
);
await agoraEngine!.joinChannel(
token: agoraToken!,
channelId: CCPreferences.getPrefValue(key: CCPreferences.equipmentCode.toString()).toString(),
uid: 0,
options: ChannelMediaOptions(
clientRoleType: ClientRoleType.clientRoleBroadcaster,
publishCameraTrack: true,
autoSubscribeVideo: true,
publishMicrophoneTrack: false,
autoSubscribeAudio: false,
publishCustomAudioTrack: false,
publishMediaPlayerAudioTrack: false,
publishMixedAudioTrack: false,
publishScreenCaptureAudio: false,
channelProfile: ChannelProfileType.channelProfileLiveBroadcasting,
),
);
}else if(state == ConnectionStateType.connectionStateReconnecting){
CCPrint(name: "CheckConnectState", value: "connectionStateReconnecting");
}else if(state == ConnectionStateType.connectionStateFailed){
CCPrint(name: "CheckConnectState", value: "connectionStateFailed");
}
} catch (e) {
statusMessage.value = 'Error going live: $e';
CCPrint(name: "CheckError Error_going_live", value: "${e}");
}
}
`
Guida per i contributori
Apri la guida per i contributori
Valutazione
Questa issue non è ancora stata valutata.