از جلسه تقویت نور کم برای روشن و خاموش کردن Google Low Light Boost استفاده کنید.
کاتلین
dependencies {
val low_light_boost_version = "16.0.0-beta01"
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2")
implementation("com.google.android.gms:play-services-base:18.7.0")
implementation("com.google.android.gms:play-services-camera-low-light-boost:${low_light_boost_version}")
implementation("com.google.android.gms:play-services-tasks:18.3.0")
}
شیار
dependencies {
def low_light_boost_version = "16.0.0-beta01"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2'
implementation 'com.google.android.gms:play-services-base:18.7.0'
implementation 'com.google.android.gms:play-services-camera-low-light-boost:${low_light_boost_version}'
implementation 'com.google.android.gms:play-services-tasks:18.3.0'
}
LowLightBoostSession
توسط بسته خدمات Google Play com.google.android.gms.cameralowlight
ارائه شده است. برای اطلاعات در مورد دسترسی به APIهای خدمات Google Play، به مستندات خدمات Google Play مراجعه کنید.
یک شیء پاسخ به تماس ایجاد کنید
هنگامی که جلسه تقویت نور کم را ایجاد می کنید ، باید آن را به یک شی منتقل کنید که رابط LowLightBoostCallback
را پیاده سازی می کند. توابع این شیء زمانی فراخوانی می شوند که جلسه قطع یا از بین برود. کد زیر نحوه ایجاد یک callback را نشان می دهد:
کاتلین
private fun createLowLightBoostCallback(): LowLightBoostCallback =
object : LowLightBoostCallback() {
override fun onSessionDestroyed() {
Log.d(TAG, "onSessionDestroyed")
lowLightBoostSession = null
}
override fun onSessionDisconnected(statusCode: Int) {
Log.d(TAG, "onSessionDisconnected: error=$statusCode")
lowLightBoostSession = null
}
}
جاوا
private LowLightBoostCallback createLowLightBoostCallback() {
LowLightBoostCallback lowLightBoostCallback = new LowLightBoostCallback() {
@Override
public void onSessionDestroyed() {
Log.d(TAG, "onSessionDestroyed");
lowLightBoostSession = null;
}
@Override
public void onSessionDisconnected(int statusCode) {
Log.d(TAG, "onSessionCreationFailed: error=" + statusCode);
lowLightBoostSession = null;
}
}
return lowLightBoostCallback;
}
نکات کلیدی در مورد این کد
- این کد یک متد خصوصی
createLowLightBoostCallback()
را تعریف می کند که شیء برگشت را ایجاد می کند. همانطور که در Create a session توضیح داده شد، زمانی که واقعاً جلسه تقویت نور کم را ایجاد می کنید، آن روش را فراخوانی می کنید. - تماس برگشتی زمانی فراخوانی می شود که جلسه قطع شود یا از بین برود. هنگامی که جلسه ایجاد می شود، فراخوانی نمی شود. برای بررسی اینکه آیا جلسه با موفقیت ایجاد شده است، شی
Task
را که توسطLowLightBoostClient.createSession
برگردانده شده است را بررسی کنید.
یک جلسه ایجاد کنید
برای ایجاد یک جلسه با نور کم، روش LowLightBoostClient.createSession
را فراخوانی کنید.
کاتلین
val options = LowLightBoostOptions(
previewSurface,
cameraId,
previewWidth,
previewHeight,
enableLowLightBoost
)
launch {
try {
val lowLightBoostSession = lowLightBoostClient
.createSession(options, createLowLightBoostCallback()).await()
Log.d(TAG, "Session created successfully")
// Get the surface from the LLB session;
// give it to camera so camera can write frames to it
} catch (e: CancellationException) {
Log.w(TAG, "Session creation was canceled", e)
lowLightBoostSession = null
} catch (e: ApiException) {
Log.e(TAG, "Session creation failed with ApiException:", e)
lowLightBoostSession = null
} catch (e: Exception) {
Log.e(TAG, "Session creation failed with Exception", e)
lowLightBoostSession = null
}
}
جاوا
LowLightBoostOptions options = new LowLightBoostOptions(
previewSurface,
cameraId,
previewWidth,
previewHeight,
enableLowLightBoost);
lowLightBoostClient
.createSession(options, createLowLightBoostCallback())
.addOnSuccessListener(
lowLightBoostExecutor,
(session) -> {
Log.d(TAG, "Session created successfully");
// Get the surface from the LLB session;
// give it to camera so camera can write frames to it
})
.addOnFailureListener(
lowLightBoostExecutor,
(e) -> {
ApiException apiException = (ApiException) e;
Log.d(TAG, "Session creation failed: " + e);
lowLightBoostSession = null;
})
.addOnCompleteListener(
lowLightBoostExecutor,
(task) -> Log.d(TAG, "Session creation complete"))
.addOnCanceledListener(
lowLightBoostExecutor,
() -> {
throw new RuntimeException("Session creation canceled");
});
نکات کلیدی در مورد این کد
- برای پیکربندی جلسه، یک شی
LowLightBoostOptions
را بهcreateSession()
میفرستید. این شی مواردی مانند سطح هدف ، شناسه دوربین مورد استفاده و ابعاد پیشنمایش را مشخص میکند. - این کد فرض میکند که شما قبلاً اتصالی به دوربین Camera2 باز کردهاید و از آن اطلاعات برای تنظیم مقادیر
cameraId, previewWidth, previewHeight
استفاده کردهاید. برای اطلاعات بیشتر، به مستندات Camera2 مراجعه کنید. -
enableLowLightBoost
یک مقدار بولی است که مشخص می کند تقویت نور کم باید روشن یا خاموش شود. -
createLowLightBoostCallback
روشی است که برای ایجاد شئ callback می نویسید. این شیء زمانی فراخوانی می شود که جلسه قطع یا از بین برود. - متد
LowLightBoostClient.createSession()
یک شیTask
را برمی گرداند. شما از این شی برای تنظیم شنوندگان موفقیت و شکست استفاده می کنید. ویدیو را در داخل شنونده موفقیت ضبط کنید. - می توانید یک
Executor
برای اجرای شنوندگان مشخص کنید. اگر یکExecutor
مشخص نکنید، شنوندگان در رشته اصلی اجرا می شوند. در این کد، ماlowLightBoostExecutor
را یکExecutor
مناسب فرض می کنیم.
پیش نمایش دوربین را شروع کنید
پس از ایجاد یک جلسه در نور کم، می توانید جریان پیش نمایش دوربین را شروع کنید. شما باید این کار را در داخل onSuccess()
که به جلسه کم نور ارسال می کنید، همانطور که در Create a session توضیح داده شده است، انجام دهید. کد زیر نحوه فیلم برداری را نشان می دهد:
کاتلین
MainActivity.this.lowLightBoostSession =
lowLightBoostSession
MainActivity.this.lowLightBoostSession
.setSceneDetectorCallback(
(lowLightBoostSession, boostStrength) -> {
Log.d(TAG, "onSceneBrightnessChanged: " +
"boostStrength=$boostStrength")
// boostStrength > 0.5 indicates a low light scene.
// Update UI accordingly.
},
lowLightBoostExecutor
)
try {
startCaptureSession(
lowLightBoostSession.getCameraSurface())
// Start a Camera2 session here. Pass the LLB surface
// to the camera so the camera can write frames to it.
} catch (e: CameraAccessException) {
Log.e(TAG, "Failed to start capture session", e)
// Must try again or start the capture session without LLB.
}
جاوا
MainActivity.this.lowLightBoostSession =
lowLightBoostSession;
MainActivity.this.lowLightBoostSession
.setSceneDetectorCallback(
(lowLightBoostSession, boostStrength) -> {
Log.d(TAG, "onSceneBrightnessChanged: " +
"boostStrength=" + boostStrength);
// boostStrength > 0.5 indicates a low light scene.
// Update UI accordingly.
},
lowLightBoostExecutor
);
try {
startCaptureSession(
lowLightBoostSession.getCameraSurface());
// Start a Camera2 session here. Pass the LLB surface
// to the camera so the camera can write frames to it.
} catch (CameraAccessException e) {
Log.e(TAG, "Failed to start capture session", e);
// Must try again or start the capture session without LLB.
}
نکات کلیدی در مورد این کد
-
lowLightBoostSession
جلسه ای است که در ایجاد یک جلسه ایجاد کردید. -
setSceneDetectorCallback()
یک شئ callback را تعریف می کند که رابطSceneDetectorCallback
پیاده سازی می کند. جلسه زمانی که روشنایی صحنه تغییر می کند، متدonSceneBrightnessChanged()
آن شی را فراخوانی می کند. پیاده سازی شما باید رابط کاربری دوربین را به درستی تنظیم کند. - شما می توانید یک
Executor
را برای اجرای callback تعیین کنید. اگر یکExecutor
مشخص نکنید، تماس برگشتی در رشته اصلی اجرا می شود. در این کد، ماlowLightBoostExecutor
را یکExecutor
مناسب فرض می کنیم. -
lowLightBoostSession.getCameraSurface()
Surface
با ویدیوی گرفته شده برمی گرداند.
جلسه را آزاد کنید
وقتی دوربین دیگر فعال نیست، جلسه تقویت نور کم را با فراخوانی LowLightBoostSession.release()
رها کنید. به ویژه، باید مطمئن شوید که وقتی فعالیت شما از بین رفت، جلسه را آزاد کنید. می توانید این کار را با فراخوانی متد موجود در متد onDestroy()
اکتیویتی خود انجام دهید:
کاتلین
override protected void onDestroy() {
super.onDestroy()
if (lowLightBoostSession != null) {
lowLightBoostSession.release()
lowLightBoostSession = null
}
}
جاوا
@Override
protected void onDestroy() {
super.onDestroy();
if (lowLightBoostSession != null) {
lowLightBoostSession.release();
lowLightBoostSession = null;
}
}
نکات کلیدی در مورد این کد
- پس از انتشار جلسه، نباید هیچ یک از متدهای آن را فراخوانی کنید. همانطور که این کد انجام می دهد، باید هر متغیری را که به جلسه اشاره می کند پاک کنید.
از جلسه تقویت نور کم برای روشن و خاموش کردن Google Low Light Boost استفاده کنید.
کاتلین
dependencies {
val low_light_boost_version = "16.0.0-beta01"
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2")
implementation("com.google.android.gms:play-services-base:18.7.0")
implementation("com.google.android.gms:play-services-camera-low-light-boost:${low_light_boost_version}")
implementation("com.google.android.gms:play-services-tasks:18.3.0")
}
شیار
dependencies {
def low_light_boost_version = "16.0.0-beta01"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2'
implementation 'com.google.android.gms:play-services-base:18.7.0'
implementation 'com.google.android.gms:play-services-camera-low-light-boost:${low_light_boost_version}'
implementation 'com.google.android.gms:play-services-tasks:18.3.0'
}
LowLightBoostSession
توسط بسته خدمات Google Play com.google.android.gms.cameralowlight
ارائه شده است. برای اطلاعات در مورد دسترسی به APIهای خدمات Google Play، به مستندات خدمات Google Play مراجعه کنید.
یک شیء پاسخ به تماس ایجاد کنید
هنگامی که جلسه تقویت نور کم را ایجاد می کنید ، باید آن را به یک شی منتقل کنید که رابط LowLightBoostCallback
را پیاده سازی می کند. توابع این شیء زمانی فراخوانی می شوند که جلسه قطع یا از بین برود. کد زیر نحوه ایجاد یک callback را نشان می دهد:
کاتلین
private fun createLowLightBoostCallback(): LowLightBoostCallback =
object : LowLightBoostCallback() {
override fun onSessionDestroyed() {
Log.d(TAG, "onSessionDestroyed")
lowLightBoostSession = null
}
override fun onSessionDisconnected(statusCode: Int) {
Log.d(TAG, "onSessionDisconnected: error=$statusCode")
lowLightBoostSession = null
}
}
جاوا
private LowLightBoostCallback createLowLightBoostCallback() {
LowLightBoostCallback lowLightBoostCallback = new LowLightBoostCallback() {
@Override
public void onSessionDestroyed() {
Log.d(TAG, "onSessionDestroyed");
lowLightBoostSession = null;
}
@Override
public void onSessionDisconnected(int statusCode) {
Log.d(TAG, "onSessionCreationFailed: error=" + statusCode);
lowLightBoostSession = null;
}
}
return lowLightBoostCallback;
}
نکات کلیدی در مورد این کد
- این کد یک متد خصوصی
createLowLightBoostCallback()
را تعریف می کند که شیء برگشت را ایجاد می کند. همانطور که در Create a session توضیح داده شد، زمانی که واقعاً جلسه تقویت نور کم را ایجاد می کنید، آن روش را فراخوانی می کنید. - تماس برگشتی زمانی فراخوانی می شود که جلسه قطع شود یا از بین برود. هنگام ایجاد جلسه، فراخوانی نمی شود. برای بررسی اینکه آیا جلسه با موفقیت ایجاد شده است، شی
Task
را که توسطLowLightBoostClient.createSession
برگردانده شده است را بررسی کنید.
یک جلسه ایجاد کنید
برای ایجاد یک جلسه با نور کم، روش LowLightBoostClient.createSession
را فراخوانی کنید.
کاتلین
val options = LowLightBoostOptions(
previewSurface,
cameraId,
previewWidth,
previewHeight,
enableLowLightBoost
)
launch {
try {
val lowLightBoostSession = lowLightBoostClient
.createSession(options, createLowLightBoostCallback()).await()
Log.d(TAG, "Session created successfully")
// Get the surface from the LLB session;
// give it to camera so camera can write frames to it
} catch (e: CancellationException) {
Log.w(TAG, "Session creation was canceled", e)
lowLightBoostSession = null
} catch (e: ApiException) {
Log.e(TAG, "Session creation failed with ApiException:", e)
lowLightBoostSession = null
} catch (e: Exception) {
Log.e(TAG, "Session creation failed with Exception", e)
lowLightBoostSession = null
}
}
جاوا
LowLightBoostOptions options = new LowLightBoostOptions(
previewSurface,
cameraId,
previewWidth,
previewHeight,
enableLowLightBoost);
lowLightBoostClient
.createSession(options, createLowLightBoostCallback())
.addOnSuccessListener(
lowLightBoostExecutor,
(session) -> {
Log.d(TAG, "Session created successfully");
// Get the surface from the LLB session;
// give it to camera so camera can write frames to it
})
.addOnFailureListener(
lowLightBoostExecutor,
(e) -> {
ApiException apiException = (ApiException) e;
Log.d(TAG, "Session creation failed: " + e);
lowLightBoostSession = null;
})
.addOnCompleteListener(
lowLightBoostExecutor,
(task) -> Log.d(TAG, "Session creation complete"))
.addOnCanceledListener(
lowLightBoostExecutor,
() -> {
throw new RuntimeException("Session creation canceled");
});
نکات کلیدی در مورد این کد
- برای پیکربندی جلسه، یک شی
LowLightBoostOptions
را بهcreateSession()
میفرستید. این شی مواردی مانند سطح هدف ، شناسه دوربین مورد استفاده و ابعاد پیشنمایش را مشخص میکند. - این کد فرض میکند که شما قبلاً اتصالی به دوربین Camera2 باز کردهاید و از آن اطلاعات برای تنظیم مقادیر
cameraId, previewWidth, previewHeight
استفاده کردهاید. برای اطلاعات بیشتر، به مستندات Camera2 مراجعه کنید. -
enableLowLightBoost
یک مقدار بولی است که مشخص می کند تقویت نور کم باید روشن یا خاموش شود. -
createLowLightBoostCallback
روشی است که برای ایجاد شئ callback می نویسید. این شیء زمانی فراخوانی می شود که جلسه قطع یا از بین برود. - متد
LowLightBoostClient.createSession()
یک شیTask
را برمی گرداند. شما از این شی برای تنظیم شنوندگان موفقیت و شکست استفاده می کنید. ویدیو را در داخل شنونده موفقیت ضبط کنید. - می توانید یک
Executor
برای اجرای شنوندگان مشخص کنید. اگر یکExecutor
مشخص نکنید، شنوندگان در رشته اصلی اجرا می شوند. در این کد، ماlowLightBoostExecutor
را یکExecutor
مناسب فرض می کنیم.
پیش نمایش دوربین را شروع کنید
پس از ایجاد یک جلسه در نور کم، می توانید جریان پیش نمایش دوربین را شروع کنید. شما باید این کار را در داخل onSuccess()
که به جلسه کم نور ارسال می کنید، همانطور که در Create a session توضیح داده شده است، انجام دهید. کد زیر نحوه فیلم برداری را نشان می دهد:
کاتلین
MainActivity.this.lowLightBoostSession =
lowLightBoostSession
MainActivity.this.lowLightBoostSession
.setSceneDetectorCallback(
(lowLightBoostSession, boostStrength) -> {
Log.d(TAG, "onSceneBrightnessChanged: " +
"boostStrength=$boostStrength")
// boostStrength > 0.5 indicates a low light scene.
// Update UI accordingly.
},
lowLightBoostExecutor
)
try {
startCaptureSession(
lowLightBoostSession.getCameraSurface())
// Start a Camera2 session here. Pass the LLB surface
// to the camera so the camera can write frames to it.
} catch (e: CameraAccessException) {
Log.e(TAG, "Failed to start capture session", e)
// Must try again or start the capture session without LLB.
}
جاوا
MainActivity.this.lowLightBoostSession =
lowLightBoostSession;
MainActivity.this.lowLightBoostSession
.setSceneDetectorCallback(
(lowLightBoostSession, boostStrength) -> {
Log.d(TAG, "onSceneBrightnessChanged: " +
"boostStrength=" + boostStrength);
// boostStrength > 0.5 indicates a low light scene.
// Update UI accordingly.
},
lowLightBoostExecutor
);
try {
startCaptureSession(
lowLightBoostSession.getCameraSurface());
// Start a Camera2 session here. Pass the LLB surface
// to the camera so the camera can write frames to it.
} catch (CameraAccessException e) {
Log.e(TAG, "Failed to start capture session", e);
// Must try again or start the capture session without LLB.
}
نکات کلیدی در مورد این کد
-
lowLightBoostSession
جلسه ای است که در ایجاد یک جلسه ایجاد کردید. -
setSceneDetectorCallback()
یک شئ callback را تعریف می کند که رابطSceneDetectorCallback
پیاده سازی می کند. جلسه زمانی که روشنایی صحنه تغییر می کند، متدonSceneBrightnessChanged()
آن شی را فراخوانی می کند. پیاده سازی شما باید رابط کاربری دوربین را به درستی تنظیم کند. - شما می توانید یک
Executor
را برای اجرای callback تعیین کنید. اگر یکExecutor
مشخص نکنید، تماس برگشتی در رشته اصلی اجرا می شود. در این کد، ماlowLightBoostExecutor
را یکExecutor
مناسب فرض می کنیم. -
lowLightBoostSession.getCameraSurface()
Surface
با ویدیوی گرفته شده برمی گرداند.
جلسه را آزاد کنید
وقتی دوربین دیگر فعال نیست، جلسه تقویت نور کم را با فراخوانی LowLightBoostSession.release()
رها کنید. به ویژه، باید مطمئن شوید که وقتی فعالیت شما از بین رفت، جلسه را آزاد کنید. می توانید این کار را با فراخوانی متد موجود در متد onDestroy()
اکتیویتی خود انجام دهید:
کاتلین
override protected void onDestroy() {
super.onDestroy()
if (lowLightBoostSession != null) {
lowLightBoostSession.release()
lowLightBoostSession = null
}
}
جاوا
@Override
protected void onDestroy() {
super.onDestroy();
if (lowLightBoostSession != null) {
lowLightBoostSession.release();
lowLightBoostSession = null;
}
}
نکات کلیدی در مورد این کد
- پس از انتشار جلسه، نباید هیچ یک از متدهای آن را فراخوانی کنید. همانطور که این کد انجام می دهد، باید هر متغیری را که به جلسه اشاره می کند پاک کنید.