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

Camera infinity focus not working android flutter.

Ouverte
#2,492 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Dart
Étoiles
795
Forks
448
Merge moyen
12 h 19 min
PR mergées (30 j)
14

Description

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}");
}
}
`

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.