AgoraIO-Extensions / AgoraIO-Extensions/Agora-Flutter-SDK

Camera infinity focus not working android flutter.

Aperta
#2,492 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
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.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.