تسجيل تشغيل الفيديو والصوت

يمكن للتطبيق تسجيل الفيديو أو الصوت الذي يتم تشغيله من تطبيق آخر. مثل التطبيقات يجب أن تتعامل مع الرمز المميّز لـ MediaProjection بشكل صحيح. تشرح هذه الصفحة كيفية إجراء ذلك. وتشرح أيضًا كيف يمكن لمشرف الجهاز إيقاف والقدرة على تسجيل أي لقطات شاشة، والطريقة التي يمكن بها لتطبيق صوتي منع التطبيقات الأخرى من تسجيل المحتوى الذي يتم تشغيله.

كيفية التعامل مع رمز MediaProjection

واجهة برمجة تطبيقات MediaProjection يسمح هذا الإذن للتطبيقات بالحصول على رمز مميّز من "MediaProjection" يتيح لها الوصول إليها لمرة واحدة. لتسجيل محتوى الشاشة أو الصوت. يطلب نظام التشغيل Android من المستخدم منح إذنًا قبل منح رمز المرور لتطبيقك.

يعرض نظام التشغيل الرموز المميّزة النشطة لبروتوكول MediaProjection في واجهة مستخدم "الإعدادات السريعة" ويسمح للمستخدمين بسحب إذن الوصول إلى الرمز المميّز في أي وقت. وعند حدوث ذلك، توقُّف استلام الشاشات أو البث الصوتي المرتبط بالجلسة بث الوسائط. يجب أن يستجيب تطبيقك بشكل مناسب، وإلا سيواصل تسجيل محتوى صوتي صامت أو بث فيديو أسود.

للتعامل مع فقدان الرمز المميّز، سجِّل طلب استدعاء في مثيل MediaProjection باستخدام الأسلوب registerCallback وأوقِف التسجيل عند استدعاء الأسلوب onStop .

لمزيد من المعلومات، يُرجى الاطّلاع على عرض الوسائط.

التقاط فيديو

اطّلِع على نموذج تطبيق ScreenCapture لمعرفة كيفية استخدام Media Projection API لالتقاط شاشة جهاز في الوقت الفعلي وعرضها على SurfaceView.

يمكنك استخدام الرمز DevicePolicyManager لمنع تسجيل الشاشة. بالنسبة إلى حسابات المؤسسات (Android for Work)، يمكن للمشرف إيقاف جمع بيانات "مساعد Google" لملف العمل. باستخدام setscreenCaptureDisabled .

يوضّح ورشة التطوير إدارة أجهزة Android بدون تطبيق كيفية حظر لقطات الشاشة.

التقاط تشغيل الصوت

تم تقديم واجهة AudioPlaybackCapture API في نظام التشغيل Android 10. واجهة برمجة التطبيقات هذه لمنح التطبيقات إمكانية نسخ الصوت الذي يتم تشغيله بواسطة تطبيقات أخرى. هذا النمط هو التناظرية لتصوير الشاشة، ولكن للصوت. إن حالة الاستخدام الأساسية هي لتطبيقات البث التي تريد تسجيل الصوت الذي تشغِّله الألعاب

يُرجى العلم أنّ واجهة برمجة التطبيقات AudioPlaybackCapture API لا تؤثّر في وقت استجابة التطبيق الذي يتم تسجيل صوته.

إنشاء تطبيق لتسجيل الشاشة

لأسباب تتعلق بالأمان والخصوصية، يفرض الالتقاط أثناء التشغيل بعض القيود. ليتمكّن التطبيق من تسجيل الصوت، يجب أن يستوفي المتطلبات التالية:

  • يجب أن يتضمّن التطبيق RECORD_AUDIO إذن.
  • يجب أن يعرض التطبيق الطلب الذي يعرضه MediaProjectionManager.createScreenCaptureIntent()، وعلى المستخدم الموافقة عليه.
  • يجب أن يكون تطبيقا الالتقاط والتشغيل في الملف الشخصي نفسه للمستخدم.

لالتقاط صوت من تطبيق آخر، يجب أن يُنشئ التطبيق كائن AudioRecord وإضافة AudioPlaybackCaptureConfiguration إليه. اتبع هذه الخطوات:

  1. الاتصال بالرقم AudioPlaybackCaptureConfiguration.Builder.build() لإنشاء AudioPlaybackCaptureConfiguration
  2. تمرير الإعدادات إلى AudioRecord من خلال طلب setAudioPlaybackCaptureConfig

التحكّم في تسجيل الصوت

يمكن لتطبيقك التحكم في أنواع المحتوى الذي يمكنه تسجيله وأنواع المحتوى من التطبيقات تسجيل التشغيل الخاص بها.

تقييد الالتقاط باستخدام المحتوى الصوتي

يمكن للتطبيق حصر المحتوى الصوتي الذي يمكنه تسجيله باستخدام الخطوات التالية:

  • نقْل AUDIO_USAGE إلى AudioPlaybackCaptureConfiguration.addMatchingUsage() للسماح بتسجيل استخدام محدّد. يمكنك استدعاء الطريقة عدة مرات لتحديد أكثر من استخدام واحد.
  • مرِّر AUDIO_USAGE إلى audioPlaybackCaptureConfiguration.exclusionUsage() إلى. أن نحظر التقاط هذا الاستخدام. يمكنك استدعاء الطريقة عدة مرات لتحديد أكثر من استخدام واحد.
  • تمرير معرّف فريد إلى AudioPlaybackCaptureConfiguration.addMatchingUid() لالتقاط التطبيقات التي لها مُعرّف فريد محدّد فقط. يمكنك استدعاء الطريقة عدة مرات لتحديد أكثر من معرّف مستخدم واحد.
  • أدخِل معرِّف UID إلى AudioPlaybackCaptureConfiguration.exclusionUid() لحظر التقاط هذا المعرّف الفريد. يمكنك استدعاء الطريقة عدة مرات لتحديد أكثر من معرّف مستخدم واحد.

يُرجى العلم أنّه لا يمكنك استخدام الطريقتَين addMatchingUsage() وexcludeUsage() معًا. يجب اختيار أحدهما. وبالمثل، لا يمكنك استخدام addMatchingUid() وexcludeUid(). في نفس الوقت.

حظر التقاط الصور بواسطة التطبيقات الأخرى

يمكنك ضبط إعدادات أحد التطبيقات لمنع التطبيقات الأخرى من التقاط صوته. لا يمكن التقاط الصوت الصادر من أحد التطبيقات إلا إذا استوفى التطبيق المتطلبات التالية:

الاستخدام

على مشغّل المحتوى الصوتي ضبط إعدادات الاستخدام على USAGE_MEDIA أو USAGE_GAME أو USAGE_UNKNOWN.

سياسة الالتقاط

يجب أن تكون سياسة تسجيل المحتوى في المشغّل هي AudioAttributes.ALLOW_CAPTURE_BY_ALL، التي تسمح للتطبيقات الأخرى بتسجيل المحتوى أثناء تشغيله. ويمكن إجراء ذلك بعدة طرق:

في حال استيفاء هذه المتطلّبات الأساسية، يمكن تسجيل أي صوت يصدره المشغِّل.

إيقاف ميزة "تسجيل النظام"

تسري إجراءات الحماية التي تسمح بالالتقاط الموضَّحة أعلاه على التطبيقات فقط. يمكن لمكوّنات نظام Android تسجيل التشغيل تلقائيًا. ويتم تخصيص العديد من هذه المكوّنات من قِبل مورّدي نظام Android وميزات الدعم. مثل سهولة الوصول والتسمية التوضيحية. لهذا السبب، يُنصح بأن تسمح التطبيقات للنظام بتسجيل تشغيلها. في حالة نادرة عندما لا إذا أردت أن يسجّل النظام تشغيل تطبيقك، فعليك ضبط سياسة الالتقاط على ALLOW_CAPTURE_BY_NONE

ضبط السياسة في وقت التشغيل

يمكنك الاتصال بالرقم AudioManager.setAllowedCapturePolicy() لتغيير سياسة التقاط البيانات أثناء تشغيل أحد التطبيقات. إذا كان يتم تشغيل MediaPlayer أو AudioTrack عند استدعاء الأسلوب، لن يتأثّر الصوت. يجب إغلاق المشغّل أو المقطع الصوتي وإعادة فتحهما كي يتم تطبيق تغيير السياسة.

السياسة = البيان + مدير الصوت + سمات الصوت

بما أنّه يمكن تحديد سياسة التسجيل في عدة مواضع، من المهم معرفة كيفية تحديد السياسة السارية. يتم دائمًا تطبيق سياسة الالتقاط الأكثر تقييدًا. على سبيل المثال، لن يسمح التطبيق الذي يحتوي ملف بيانه على setAllowedCapturePolicy="false" أبدًا لتطبيقات AudioManager#setAllowedCapturePolicy غير المخصّصة للنظام بتسجيل الصوت، حتى إذا تم ضبط AudioManager#setAllowedCapturePolicy على ALLOW_CAPTURE_BY_ALL. وبالمثل، إذا تم ضبط AudioManager#setAllowedCapturePolicy على ALLOW_CAPTURE_BY_ALL وأعدّ البيان setAllowedCapturePolicy="true"، ولكن تم إنشاء AudioAttributes مشغّل الوسائط باستخدام AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)، لن تتمكّن التطبيقات غير المضمّنة في النظام من التقاط مشغّل الوسائط هذا.

يلخص الجدول أدناه تأثير سمة البيان السياسة الفعالة:

allowAudioPlaybackCapture ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
صحيح أي تطبيق النظام فقط لا يتم تسجيل أي بيانات
خطأ النظام فقط النظام فقط لا يتم تسجيل أي بيانات