الفرق بين المراجعتين لصفحة: «Cordova/cordova plugin media capture»

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:إضافة الوصول إلى الوسائط المتعددة في كوردوفا}}</noinclude> تصنيف: Cordova تصنيف: Plugin...'
 
لا ملخص تعديل
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:إضافة الوصول إلى الوسائط المتعددة في كوردوفا}}</noinclude>
<noinclude>{{DISPLAYTITLE:إضافة الوصول إلى الوسائط المتعددة في كوردوفا}}</noinclude>
[[تصنيف: Cordova]]
[[تصنيف: Cordova]]
[[تصنيف: Plugin]]
[[تصنيف: Plugin]]
تمكن هذه الإضافة من التقاط الصور وتسجيل الصوت والفيديو على الجهاز.  
تمكّن إضافة الوصول إلى الوسائط المتعددة (<code>cordova-plugin-media-capture</code>) من التقاط الصور وتسجيل الصوت والفيديو على الجهاز.


<code>WARNING</code>: جمع واستخدام الصور أو الفيديوهات أو الصوتيات من الكاميرا أو الميكروفون في الجهاز تثير مخاوف متعلقة بالخصوصية. يجب أن تناقش سياسة الخصوصية في تطبيقك كيفية استخدام التطبيق لأجهزة الاستشعار هذه،وما إن كانت البيانات المسجلة ستُتشارك مع أطراف أخرى. بالإضافة إلى ذلك، إذا لم يكن استخدام الكاميرا أو الميكروفون واضحًا في واجهة المستخدم، فيجب عليك تقديم إشعار فوري قبل محاولة التطبيق الوصولَ إلى الكاميرا أو الميكروفون (إن لم يكن نظام التشغيل يفعل ذلك بالفعل). ينبغي أن يوفر هذا الإشعار نفس المعلومات المذكورة أعلاه، إضافة إلى استئذان المُستخدم (على سبيل المثال، عبر تقديم خيارات من قبيل <code>OK</code> و <code>No Thanks</code>). لاحظ أن بعض متاجر التطبيقات قد تُلزم تطبيقك بتقديم إشعار فوري، واستئذان المستخدم قبل استخدام الكاميرا أو الميكروفون. لمزيد من المعلومات، يرجى الاطلاع على دليل الخصوصية.  
'''تنبيه''': جمع واستخدام الصور أو الفيديوهات أو الصوتيات من الكاميرا أو الميكروفون الخص بالجهاز يثير مخاوف متعلقة بالخصوصية. يجب أن تناقش سياسةُ الخصوصيةُ في تطبيقك كيفية استخدام التطبيق لأجهزة الاستشعار هذه، وما إن كانت البيانات المسجّلة ستُتشارك مع أطراف أخرى. بالإضافة إلى ذلك، إذا لم يكن استخدام الكاميرا أو الميكروفون واضحًا في واجهة المستخدم، فيجب عليك تقديم إشعار فوري قبل محاولة التطبيق الوصولَ إلى الكاميرا أو الميكروفون (إن لم يكن نظام التشغيل يفعل ذلك بالفعل). ينبغي أن يوفر هذا الإشعار نفس المعلومات المذكورة أعلاه، إضافة إلى استئذان المُستخدم (على سبيل المثال، عبر تقديم خيارات من قبيل '''حسنًا''' و '''لا شكرًا'''). لاحظ أنّ بعض متاجر التطبيقات قد تُلزم تطبيقك بتقديم إشعار فوري واستئذان المستخدم قبل استخدام الكاميرا أو الميكروفون. لمزيد من المعلومات، يرجى الاطلاع على [[Cordova/privacy|دليل الخصوصية]].  


تعرّف هذه الإضافة كائنًا عامًّا <code>navigator.device.capture</code>.  
تعرّف هذه الإضافة كائنًا عامًّا <code>navigator.device.capture</code>. وعلى الرغم من أن هذا الكائن موجودٌ في النطاق العام (global scope)، إلا أنّه لن يكون متوفرًا إلا بعد إطلاق الحدث <code>[[Cordova/events#deviceready|deviceready]]</code>. <syntaxhighlight lang="javascript">document.addEventListener("deviceready", onDeviceReady, false);
 
على الرغم من أن هذا الكائن موجود في النطاق العام (global scope)، إلا أنه لن يكون متوفرًا إلا بعد إطلاق الحدث <code>deviceready</code>.  
<syntaxhighlight lang="javascript">document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
function onDeviceReady() {
     console.log(navigator.device.capture);
     console.log(navigator.device.capture);
}‎</syntaxhighlight>  
}‎</syntaxhighlight>  


الإبلاغ عن مشكلات في هذا الإضافة على [https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20%22cordova-plugin-media-capture%22%20ORDER%20BY%20priority%20DESC%2C%20summary%20ASC%2C%20updatedDate%20DESC Apache Cordova issue tracker]
== التثبيت ==
 
يمكن تثبيت هذه الإضافة عبر الأمر:<syntaxhighlight lang="shell">cordova plugin add cordova-plugin-media-capture‎</syntaxhighlight>  
== التثبيت ==  
<syntaxhighlight lang="javascript">cordova plugin add cordova-plugin-media-capture‎</syntaxhighlight>  


== المنصات المدعومة ==  
== المنصات المدعومة ==  
سطر 26: سطر 21:


==الكائنات==  
==الكائنات==  
*Capture  
*<code>Capture</code>
*CaptureAudioOptions  
*<code>CaptureAudioOptions</code>
*CaptureImageOptions  
*<code>CaptureImageOptions</code>
*CaptureVideoOptions  
*<code>CaptureVideoOptions</code>
*CaptureCallback  
*<code>CaptureCallback</code>
*CaptureErrorCB  
*<code>CaptureErrorCB</code>
*ConfigurationData  
*<code>ConfigurationData</code>
*MediaFile  
*<code>MediaFile</code>
*MediaFileData  
*<code>MediaFileData</code>


== التوابع ==  
== التوابع ==  
*capture.captureAudio  
*<code>capture.captureAudio</code>
*capture.captureImage  
*<code>capture.captureImage</code>
*capture.captureVideo  
*<code>capture.captureVideo</code>
*MediaFile.getFormatData  
*<code>MediaFile.getFormatData</code>


== خاصيات ==  
== خاصيات ==  
* <code>supportedAudioModes</code>: تمثل هذه الخاصية تنسيقات التسجيل الصوتي (formats) التي يدعمها الجهاز. (ConfigurationData[]‎)  
* <code>supportedAudioModes</code>: تمثل هذه الخاصية تنسيقات (formats) التسجيل الصوتي التي يدعمها الجهاز. (<code>ConfigurationData[]‎</code>)  
* <code>supportedImageModes</code>: أحجام وتنسيقات الصور المسجلة التي يدعمها الجهاز. (ConfigurationData []‎)  
* <code>supportedImageModes</code>: أحجام وتنسيقات الصور المسجلة التي يدعمها الجهاز. (<code>ConfigurationData []</code>‎)  
* <code>supportedVideoModes</code>: دقو الفيديوهات المُسجلة وتنسيقاتها التي يدعمها الجهاز. (ConfigurationData []‎)  
* <code>supportedVideoModes</code>: دقة (resolution) الفيديوهات المُسجلة وتنسيقاتها التي يدعمها الجهاز. (<code>ConfigurationData []</code>‎)  


==capture.captureAudio==  
==<code>capture.captureAudio</code>==  
يبدأ هذا التابع تشغيل تطبيق تسجيل الصوت، ويُعيد معلومات حول الملفات الصوتية المُسجّلة.  
يبدأ هذا التابع تشغيل تطبيق تسجيل الصوت (audio recorder application)، ويُعيد معلومات حول الملفات الصوتية المُسجّلة.  
<syntaxhighlight lang="javascript">navigator.device.capture.captureAudio(
<syntaxhighlight lang="javascript">navigator.device.capture.captureAudio(
     CaptureCB captureSuccess, CaptureErrorCB captureError,  [CaptureAudioOptions options]
     CaptureCB captureSuccess, CaptureErrorCB captureError,  [CaptureAudioOptions options]
);‎</syntaxhighlight>  
);‎</syntaxhighlight>يبدأ هذا التابع عمليةً غير متزامنةٍ لتسجيل المقطوعات الصوتية باستخدام تطبيق التسجيل الصوتي الافتراضي للجهاز. تسمح هذه العملية لمستخدم الجهاز بالتقاط عدة تسجيلات في جلسةٍ (session) واحدة.
===الوصف===


يبدأ هذا التابع عملية غير متزامنة لالتقاط التسجيلات الصوتية باستخدام تطبيق التسجيل الصوتي الافتراضي للجهاز. تسمح هذه العملية لمستخدم الجهاز بالتقاط عدة تسجيلات في جلسةٍ (session) واحدة.  
تنتهي عملية الالتقاط عند خروج المستخدم من تطبيق التسجيل الصوتي، أو عند بلوغ الحد الأقصى من التسجيلات المحدد من قبل المعامل <code>CaptureAudioOptions.limit</code>. في حال عدم تمرير المعامل <code>limit</code>، فسيأخذ القيمة الافتراضية (<code>1</code>)، وستُنهى عملية الالتقاط بعد تسجيل المستخدم لمقطعٍ صوتي واحد.  


تنتهي عملية الالتقاط عند خروج المستخدم من تطبيق التسجيل الصوتي، أو عند بلوغ الحد الأقصى من التسجيلات المحدد من قبل المعامل <code>CaptureAudioOptions.limit</code>. في حال عدم تمرير المعامل <code>limit</code>، فسيأخذ القيمة الافتراضية (1)، وستُنهى عملية الالتقاط بعد تسجيل المستخدم لمقطعٍ صوتي واحد.
عند انتهاء عملية الالتقاط، يُنفّذ رد النداء <code>CaptureCallback</code>، مع تمرير مصفوفة إليه تضم كائناتٍ <code>MediaFile</code> تحتوي معلومات وصفية لكل الملفات الصوتيةالمُلتقطة. إذا أنهى المستخدم العملية قبل التقاط أي مقطعٍ صوتي، سيُنفّذ رد النداء <code>CaptureErrorCallback</code> مع تمرير كائنٍ <code>CaptureError</code> إليه، والذي سيتضمن رمز الخطأ <code>CaptureError.CAPTURE_NO_MEDIA_FILES</code>.  
 
عند انتهاء عملية الالتقاط، ينفّذ رد النداء <code>CaptureCallback</code> مع تمرير مصفوفة إليه تضم كائناتٍ <code>MediaFile</code> تحتوي معلومات وصفية لكل الملفات الصوتيةالمُلتقطة. إذا أنهى المستخدم العملية قبل التقاط أي مقطعٍ صوتي، سيُنفّذ رد النداء <code>CaptureErrorCallback</code> مع تمرير كائنٍ <code>CaptureError</code> إليه، والذي سيتضمن رمز الخطأ <code>CaptureError.CAPTURE_NO_MEDIA_FILES</code>.  
=== المنصات المدعومة ===  
=== المنصات المدعومة ===  
*أندرويد  
*أندرويد  
سطر 64: سطر 56:
*ويندوز  
*ويندوز  
=== مثال ===  
=== مثال ===  
<syntaxhighlight lang="javascript">// capture callback
<syntaxhighlight lang="javascript">// رد نداء الالتقاط
var captureSuccess = function(mediaFiles) {
var captureSuccess = function(mediaFiles) {
     var i, path, len;
     var i, path, len;
     for (i = 0, len = mediaFiles.length; i < len; i += 1) {
     for (i = 0, len = mediaFiles.length; i < len; i += 1) {
         path = mediaFiles[i].fullPath;
         path = mediaFiles[i].fullPath;
         // do something interesting with the file
         // افعل شيئا ما بالملف
     }
     }
};
};
// capture error callback
// رد نداء الخطأ الخاص بالالتقاط
var captureError = function(error) {
var captureError = function(error) {
     navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
     navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
};
};
// start audio capture
// بدء تسجيل الصوت
navigator.device.capture.captureAudio(captureSuccess, captureError, {limit:2});‎</syntaxhighlight>  
navigator.device.capture.captureAudio(captureSuccess, captureError, {limit:2});‎</syntaxhighlight>  
== ملاحظات خاصة بمنصة iOS ==  
=== ملاحظات خاصة بمنصة iOS ===  
* لا تتوفر منصة iOS على تطبيق افتراضي لتسجيل الصوت، لذا يتم توفير واجهة مستخدم بسيطة.  
* لا تتوفر منصة iOS على تطبيق افتراضي لتسجيل الصوت، لذا يتم توفير واجهة مستخدم بسيطة.  
=== ملاحظات خاصة بمنصتي Windows Phone الإصدارين 7 و 8 ===  
=== ملاحظات خاصة بمنصتي Windows Phone الإصدارين 7 و 8 ===  
* لا يحتوي Windows Phone 7 على تطبيق افتراضي لتسجيل الصوت، لذا يتم توفير واجهة مستخدم بسيطة.  
* لا يحتوي Windows Phone 7 على تطبيق افتراضي لتسجيل الصوت، لذا يتم توفير واجهة مستخدم بسيطة.  


==capture.captureImage==  
==<code>capture.captureImage</code>==  
يبدأ هذا التابع تشغيل تطبيق الكاميرا، ويعيد معلومات حول ملفات الصور الملتقطة.  
يبدأ هذا التابع تشغيل تطبيق الكاميرا، ويعيد معلومات حول ملفات الصور الملتقطة.  
<syntaxhighlight lang="javascript">navigator.device.capture.captureImage(
<syntaxhighlight lang="javascript">navigator.device.capture.captureImage(
سطر 92: سطر 84:
ٍيبدأ هذا التابع عمليةً غير متزامنة لالتقاط الصور باستخدام تطبيق الكاميرا الخاص بالجهاز. تتيح هذه العملية للمستخدمين التقاط أكثر من صورة واحدة في جلسة واحدة.  
ٍيبدأ هذا التابع عمليةً غير متزامنة لالتقاط الصور باستخدام تطبيق الكاميرا الخاص بالجهاز. تتيح هذه العملية للمستخدمين التقاط أكثر من صورة واحدة في جلسة واحدة.  


تنتهي عملية الالتقاط عندما يغلق المستخدم تطبيق الكاميرا، أو عند بلوغ الحد الأقصى لعدد التسجيلات المحدد بواسطة المعامل <code>CaptureImageOptions.limit</code>. إذا لم تُحدّد قيمة <code>limit</code>، فسيتم تعيينه إلى قيمته الافتراضية (1)، وستُنهى عملية الالتقاط بعد التقاط المستخدم لصورةٍ واحدةٍ.  
تنتهي عملية الالتقاط عندما يغلق المستخدم تطبيق الكاميرا، أو عند بلوغ الحد الأقصى لعدد التسجيلات المحدد بواسطة المعامل <code>CaptureImageOptions.limit</code>. إذا لم تُحدّد قيمة <code>limit</code>، فسيتم تعيينه إلى قيمته الافتراضية (<code>1</code>)، وستُنهى عملية الالتقاط بعد التقاط المستخدم لصورةٍ واحدةٍ فقط.  


عند انتهاء عملية الالتقاط، فسيُستدعى رد النداء <code>CaptureCB</code> مع إعطائه مصفوفة تضم كائنات <code>MediaFile</code> تحتوي معلومات وصفية لملفات الصور المُلتقطة. إذا أنهى المستخدم العملية قبل التقاط أي صورة، فسيُنفّذ رد النداء <code>CaptureErrorCB</code> مع إعطائه كائنًا <code>CaptureError</code> يحتوي على رمز خطأ <code>CaptureError.CAPTURE_NO_MEDIA_FILES</code>.  
عند انتهاء عملية الالتقاط، فسيُستدعى رد النداء <code>CaptureCB</code> مع إعطائه مصفوفة تضم كائنات <code>MediaFile</code> تحتوي معلومات وصفية عن ملفات الصور المُلتقطة. إذا أنهى المستخدم العملية قبل التقاط أي صورة، فسيُنفّذ رد النداء <code>CaptureErrorCB</code> مع إعطائه كائنًا <code>CaptureError</code> يحتوي على رمز خطأ <code>CaptureError.CAPTURE_NO_MEDIA_FILES</code>.  
=== المنصات المدعومة ===  
=== المنصات المدعومة ===  
*أندرويد  
*أندرويد  
سطر 100: سطر 92:
*iOS  
*iOS  
*ويندوز  
*ويندوز  
== ملاحظات خاصة بمنصة iOS ==  
=== ملاحظات خاصة بمنصة iOS ===  


منذ الإصدار iOS 10، صار من الإلزامي تقديم وصف للاستخدام في الملف <code>info.plist</code> إن كنت تريد الوصول إلى بيانات حساسة. عندما يستأذن النظام المستخدم للوصول إلى تلك المعلومات، سيُعرض وصف الاستخدام ذاك كجزء من مربع حوار الاستئذان، ولكن إذا لم توفر وصف الاستخدام، فسيتعطل التطبيق قبل عرض مربع الحوار. وأيضًا، سترفض Apple التطبيقات التي تحاول الوصول إلى البيانات الخاصة دون أن تقدم وصفًا للاستخدام.  
منذ الإصدار العاشر من منصة iOS، صار من الإلزامي تقديم وصف للاستخدام في الملف <code>info.plist</code> إن كنت تريد الوصول إلى البيانات الحساسة. عندما يستأذن النظام المستخدم للوصول إلى تلك المعلومات، سيُعرض وصف الاستخدام ذاك كجزء من مربع حوار الاستئذان، ولكن إذا لم توفر وصف الاستخدام، فسيتعطل التطبيق قبل عرض مربع الحوار. كما سترفض Apple التطبيقات التي تحاول الوصول إلى البيانات الخاصة دون أن تقدم وصفًا للاستخدام.  


تتطلب هذه الإضافات أوصاف الاستخدام التالية:  
تتطلب هذه الإضافة أوصاف الاستخدام التالية:  
* <code>NSCameraUsageDescription</code> يصف سبب محاولةَ التطبيقِ الوصولَ إلى كاميرا المستخدم.  
* <code>NSCameraUsageDescription</code>: يحدد سبب محاولةَ التطبيقِ الوصولَ إلى كاميرا المستخدم.  
* <code>NSMicrophoneUsageDescription</code> يحدد سبب محاولةَ التطبيقِ الوصولَ إلى ميكروفون المستخدم.  
* <code>NSMicrophoneUsageDescription</code>: يحدد سبب محاولةَ التطبيقِ الوصولَ إلى ميكروفون المستخدم.  
* <code>NSPhotoLibraryUsageDescriptionentry</code> يحدد سبب محاولة التطبيق الوصولَ إلى مكتبة الصور الخاصة بالمستخدم.  
* <code>NSPhotoLibraryUsageDescriptionentry</code>: يحدد سبب محاولة التطبيق الوصولَ إلى مكتبة الصور الخاصة بالمستخدم.  


لإضافة هذه المُدخلات إلى الملف <code>info.plist</code>، يمكنك استخدام الوسم <code>edit-config</code> في الملف <code>config.xml</code> على النحو التالي:  
لإضافة هذه المُدخلات إلى الملف <code>info.plist</code>، يمكنك استخدام الوسم <code>edit-config</code> في الملف <code>[[Cordova/config ref|config.xml]]</code> على النحو التالي:  
<syntaxhighlight lang="javascript"><edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="merge">
<syntaxhighlight lang="xml"><edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="merge">
     <string>need camera access to take pictures</string>
     <string>need camera access to take pictures</string>
</edit-config>‎</syntaxhighlight>
</edit-config>‎</syntaxhighlight>
<syntaxhighlight lang="javascript"><edit-config target="NSMicrophoneUsageDescription" file="*-Info.plist" mode="merge">
<syntaxhighlight lang="xml"><edit-config target="NSMicrophoneUsageDescription" file="*-Info.plist" mode="merge">
     <string>need microphone access to record sounds</string>
     <string>need microphone access to record sounds</string>
</edit-config>‎</syntaxhighlight>
</edit-config>‎</syntaxhighlight>
<syntaxhighlight lang="javascript"><edit-config target="NSPhotoLibraryUsageDescription" file="*-Info.plist" mode="merge">
<syntaxhighlight lang="xml"><edit-config target="NSPhotoLibraryUsageDescription" file="*-Info.plist" mode="merge">
     <string>need to photo library access to get pictures from there</string>
     <string>need to photo library access to get pictures from there</string>
</edit-config>‎</syntaxhighlight>  
</edit-config>‎</syntaxhighlight>  
=== ملاحظات خاصة بالمتصفحات (Browsers) ===  
=== ملاحظات خاصة بالمتصفحات (Browsers) ===  


يعمل هذا التابع على منصات Chrome و Firefox و Opera فقط (لأنّ متصفحي IE و Safari لا يدعمان الواجهة البرمجية التي تخص navigator.getUserMedia)  
يعمل هذا التابع على منصات Chrome و Firefox و Opera فقط (لأنّ متصفحي IE و Safari لا يدعمان الواجهة البرمجية التي تخص <code>navigator.getUserMedia</code>)  


لا يمكن عرض الصور باستخدام عنوان URL الخاص بالملف المُلتقط إلا في متصفحي Chrome و Opera. يُخزّن متصفح Firefox الصور الملتقطة في وحدة التخزين IndexedDB (راجع وثائق الملف الإضافي للملفونتيجة لذلك، تكون الطريقة الوحيدة لإظهار الصورة الملتقطة هي قراءتها وعرضها باستخدام عنوان DataURL الخاص بها.  
لا يمكن عرض الصور باستخدام عنوان URL الخاص بالملف المُلتقط إلا في متصفحي Chrome و Opera. يُخزّن متصفح Firefox الصور الملتقطة في وحدة التخزين [[Cordova/storage#.D8.A7.D9.84.D9.88.D8.A7.D8.AC.D9.87.D8.A9 IndexedDB|IndexedDB]] (راجع توثيق [[Cordova/cordova plugin file|إضافة الملفات]]ونتيجةً لذلك، ستكون الطريقة الوحيدة لإظهار الصورة الملتقطة هي قراءتها وعرضها باستخدام عنوان <code>DataURL</code> الخاص بها.  
=== مثال ===  
=== مثال ===  
<syntaxhighlight lang="javascript">// capture callback
<syntaxhighlight lang="javascript">// رد نداء الالتقاط
var captureSuccess = function(mediaFiles) {
var captureSuccess = function(mediaFiles) {
     var i, path, len;
     var i, path, len;
     for (i = 0, len = mediaFiles.length; i < len; i += 1) {
     for (i = 0, len = mediaFiles.length; i < len; i += 1) {
         path = mediaFiles[i].fullPath;
         path = mediaFiles[i].fullPath;
         // do something interesting with the file
         // افعل شيئا ما بالملف
     }
     }
};
};
// capture error callback
// رد نداء الخطأ الخاص بالالتقاط
var captureError = function(error) {
var captureError = function(error) {
     navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
     navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
};
};
// start image capture
// بدء عملية التقاط الصورة
navigator.device.capture.captureImage(captureSuccess, captureError, {limit:2});‎</syntaxhighlight>  
navigator.device.capture.captureImage(captureSuccess, captureError, {limit:2});‎</syntaxhighlight>  


==capture.captureVideo==  
==<code>capture.captureVideo</code>==  
يبدأ هذا التابع تشغيل تطبيق مُسجّل الفيديو، ويُعيد معلومات حول ملفات الفيديو المُصوّرة.  
يبدأ هذا التابع تشغيل تطبيق مُسجّل الفيديو (video recorder application)، ويُعيد معلومات حول ملفات الفيديو المُصوّرة.  
<syntaxhighlight lang="javascript">navigator.device.capture.captureVideo(
<syntaxhighlight lang="javascript">navigator.device.capture.captureVideo(
     CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options]
     CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options]
سطر 149: سطر 141:
ٍيبدأ هذا التابع عمليةً غير متزامنة لتسجيل الفيديوهات باستخدام تطبيق تسجيل الفيديو على الجهاز. تتيح العملية للمستخدم التقاط عدة تسجيلات في جلسة واحدة.  
ٍيبدأ هذا التابع عمليةً غير متزامنة لتسجيل الفيديوهات باستخدام تطبيق تسجيل الفيديو على الجهاز. تتيح العملية للمستخدم التقاط عدة تسجيلات في جلسة واحدة.  


تنتهي عملية التسجيل عند خروج المستخدم من تطبيق تسجيل الفيديو، أو عند بلوغ الحد الأقصى من التسجيلات المحدد في المعامل <code>CaptureVideoOptions.limit</code>. في حالة عدم تحديد قيمة المعامل <code>limit</code>، فسيتم تعيينها غند القيمة الافتراضية (1)، وستُنهى العملية بعد تسجيل المستخدم لمقطع فيديو واحد.  
تنتهي عملية التسجيل عند خروج المستخدم من تطبيق تسجيل الفيديو، أو عند بلوغ الحد الأقصى من التسجيلات المحدد في المعامل <code>CaptureVideoOptions.limit</code>. في حالة عدم تحديد قيمة المعامل <code>limit</code>، فسيتم تعيينها غند القيمة الافتراضية (<code>1</code>)، وستُنهى العملية بعد تسجيل المستخدم لمقطع فيديو واحد.  


عند انتهاء عملية التصوير، يُستدعى رد النداء <code>CaptureCB</code> مع إعطائه مصفوفة تضم كائنات <code>MediaFile</code>، والتي تحتوي معلومات وصفية لملفات الفيديو المُصوّرة. إذا أنهى المستخدم العملية قبل التقاط مقطع فيديو، فسيُنفّذ رد النداء <code>CaptureErrorCB</code> مع إعطائه كائنًا <code>CaptureError</code>، والذي يحتوي على رمز الخطأ <code>CaptureError.CAPTURE_NO_MEDIA_FILES</code>.
عند انتهاء عملية التصوير، يُستدعى رد النداء <code>CaptureCB</code> مع إعطائه مصفوفة تضم كائنات <code>MediaFile</code>، والتي تحتوي معلومات وصفية عن ملفات الفيديو المُصوّرة. إذا أنهى المستخدم العملية قبل التقاط أيّ مقطع فيديو، فسيُنفّذ رد النداء <code>CaptureErrorCB</code> مع إعطائه كائنًا <code>CaptureError</code>، والذي يحتوي على رمز الخطأ <code>CaptureError.CAPTURE_NO_MEDIA_FILES</code>.


=== المنصات المدعومة ===  
=== المنصات المدعومة ===  
سطر 158: سطر 150:
*ويندوز  
*ويندوز  
=== مثال ===  
=== مثال ===  
<syntaxhighlight lang="javascript">// capture callback
<syntaxhighlight lang="javascript">// رد نداء الالتقاط
var captureSuccess = function(mediaFiles) {
var captureSuccess = function(mediaFiles) {
     var i, path, len;
     var i, path, len;
     for (i = 0, len = mediaFiles.length; i < len; i += 1) {
     for (i = 0, len = mediaFiles.length; i < len; i += 1) {
         path = mediaFiles[i].fullPath;
         path = mediaFiles[i].fullPath;
         // do something interesting with the file
         // افعل شيئا ما بالملف
     }
     }
};
};
// capture error callback
// رد نداء الخطأ الخاص بالالتقاط
var captureError = function(error) {
var captureError = function(error) {
     navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
     navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
};
};
// start video capture
// بدء تصوير الفيديو
navigator.device.capture.captureVideo(captureSuccess, captureError, {limit:2});‎</syntaxhighlight>  
navigator.device.capture.captureVideo(captureSuccess, captureError, {limit:2});‎</syntaxhighlight>  


==CaptureAudioOptions==  
==<code>CaptureAudioOptions</code>==  
يحتوي الكائن CaptureAudioOptions على إعدادات عمليات تسجيل الصوت.  
يحتوي الكائن <code>CaptureAudioOptions</code> على إعدادات عمليات تسجيل الصوت.  
=== خاصيات ===  
=== خاصيات ===  
* <code>limit</code>: تمثل هذه الخاصية الحد الأقصى لعدد المقاطع الصوتية التي يمكن لمستخدم الجهاز تسجيلها في عملية تسجيل واحدة. يجب أن تكون القيمة أكبر من أو تساوي 1 (القيمة الافتراضية هي 1).  
* <code>limit</code>: تمثل هذه الخاصية الحد الأقصى لعدد المقاطع الصوتية التي يمكن لمستخدم الجهاز تسجيلها خلال عملية تسجيلٍ واحدة. يجب أن تكون القيمة أكبر من أو تساوي <code>1</code> (القيمة الافتراضية هي <code>1</code>).  
* <code>duration</code>: المدة القصوى للمقاطع الصوتية، بالثواني.  
* <code>duration</code>: تمثل المدة القصوى للمقاطع الصوتية بالثواني.  
=== مثال ===  
=== مثال ===  
<syntaxhighlight lang="javascript">// limit capture operation to 3 media files, no longer than 10 seconds each
<syntaxhighlight lang="javascript">// حصر عدد عمليات الالتقاط في 3 ملفات وسائط، بحيث لا يتجاوز أيٌّ منها 10 ثواني
var options = { limit: 3, duration: 10 };
var options = { limit: 3, duration: 10 };
navigator.device.capture.captureAudio(captureSuccess, captureError, options);‎</syntaxhighlight>  
navigator.device.capture.captureAudio(captureSuccess, captureError, options);‎</syntaxhighlight>  
===ملاحظات خاصة بمنصة أندرويد ===  
===ملاحظات خاصة بمنصة أندرويد ===  
* المعامل <code>duration</code> غير مدعوم في منصة أندرويد. لا يمكن أن تحديد أطوال التسجيلات برمجيا.  
* المعامل <code>duration</code> غير مدعوم في منصة أندرويد. لذا لا يمكن تحديد أطوال التسجيلات برمجيا.  
== ملاحظات خاصة بمنصة iOS ==  
=== ملاحظات خاصة بمنصة iOS ===  
* المعامل <code>limit</code> غير مدغوم في iOS، لذلك لا يمكن إنشاء إلا تسجيلة واحد عند كل استدعاء.  
* المعامل <code>limit</code> غير مدغوم في منصة iOS، لذلك لا يمكن إنشاء إلا تسجيلة واحد عند كل استدعاء.  


==CaptureImageOptions==  
==<code>CaptureImageOptions</code>==  
يُغلّف هذا الكائن إعدادات عملية التقاط الصور.  
يُغلّف هذا الكائن إعدادات عملية التقاط الصور.  
=== خاصيات ===  
=== خاصيات ===  
* <code>limit</code>: تمثل هذه الخاصية الحد الأقصى لعدد الصور التي يمكن للمستخدم التقاطها في كل عملية التقاط. يجب أن تكون القيمة أكبر من أو تساوي 1 (القيمة الافتراضية هي 1).  
* <code>limit</code>: تمثل هذه الخاصية الحد الأقصى لعدد الصور التي يمكن للمستخدم التقاطها في كل عملية التقاط. يجب أن تكون القيمة أكبر من أو تساوي <code>1</code> (القيمة الافتراضية هي <code>1</code>).  
=== مثال ===  
=== مثال ===  
<syntaxhighlight lang="javascript">// limit capture operation to 3 images
<syntaxhighlight lang="javascript">// حصر عدد عمليات الالتقاط في 3 صور
var options = { limit: 3 };
var options = { limit: 3 };
navigator.device.capture.captureImage(captureSuccess, captureError, options);‎</syntaxhighlight>  
navigator.device.capture.captureImage(captureSuccess, captureError, options);‎</syntaxhighlight>  
== ملاحظات خاصة بمنصة iOS ==  
=== ملاحظات خاصة بمنصة iOS ===  
* المعامل <code>limit</code> غير مدعوم في هذه المنصة، لذلك لا يمكن التقاط إلا صورة واحدة فقط عند كل استدعاء.  
* المعامل <code>limit</code> غير مدعوم في هذه المنصة، لذلك لا يمكن التقاط إلا صورة واحدة فقط عند كل استدعاء.  


==CaptureVideoOptions==  
==<code>CaptureVideoOptions</code>==  
يغلّف هذا الكائن إعدادات عملية التقاط الفيديو.  
يُغلّف هذا الكائن إعدادات عملية التقاط الفيديو.  
=== خاصيات ===  
=== خاصيات ===  
* <code>limit</code>: تمثل هذه الخاصية الحد الأقصى لعدد مقاطع الفيديو التي يمكن لمستخدم الجهاز تصويرها في كل عملية تصوير. يجب أن تكون القيمة أكبر من أو تساوي 1 (القيمة الافتراضية هي 1).  
* <code>limit</code>: تمثل هذه الخاصية الحد الأقصى لعدد مقاطع الفيديو التي يمكن لمستخدم الجهاز تصويرها في كل عملية تصوير. يجب أن تكون القيمة أكبر من أو تساوي <code>1</code> (القيمة الافتراضية هي <code>1</code>).  
* <code>duration</code>: المدة القصوى لمقطع الفيديو، بالثواني.  
* <code>duration</code>: تمثل المدة القصوى لمقطع الفيديو بالثواني.  
=== مثال ===  
=== مثال ===  
<syntaxhighlight lang="javascript">// limit capture operation to 3 video clips
<syntaxhighlight lang="javascript">// حصر عدد عمليات الالتقاط في 3 فيديوهات
var options = { limit: 3 };
var options = { limit: 3 };
navigator.device.capture.captureVideo(captureSuccess, captureError, options);‎</syntaxhighlight>  
navigator.device.capture.captureVideo(captureSuccess, captureError, options);‎</syntaxhighlight>  
=== ملاحظات خاصة بمنصة iOS ===  
=== ملاحظات خاصة بمنصة iOS ===  
* يتم تجاهل الخاصية <code>limit</code>. لا يُسجّل إلا مقطع فيديو واحد فقط لكل استدعاء.  
* يتم تجاهل الخاصية <code>limit</code>. لذلك لا يُسجّل إلا مقطع فيديو واحد فقط عند كل استدعاء.  
===ملاحظات خاصة بمنصة أندرويد ===  
===ملاحظات خاصة بمنصة أندرويد ===  
* تدعم منصة أندرويد خاصية <code>quality</code> إضافية، للسماح بتصوير مقاطع الفيديو بجودات مختلفة. القيمة <code>1</code> (الافتراضية) تشير إلى جودة عالية، والقيمة <code>0</code> تعني جودة منخفضة، ومناسبة لرسائل MMS. انظر صفحة [http://developer.android.com/reference/android/provider/MediaStore.html#EXTRA_VIDEO_QUALITY here] لمزيد من التفاصيل.  
* تدعم منصة أندرويد خاصيةً <code>quality</code> إضافية، للسماح بتصوير مقاطع الفيديو بجودات مختلفة. القيمة <code>1</code> (الافتراضية) تشير إلى جودة عالية، والقيمة <code>0</code> تعني جودة منخفضة، والتي تكون عادةً مناسبةً لرسائل MMS. انظر [http://developer.android.com/reference/android/provider/MediaStore.html#EXTRA_VIDEO_QUALITY هذه الصفحة] لمزيد من التفاصيل.  
=== مثال (Android w / quality) ===  
=== مثال ===  
<syntaxhighlight lang="javascript">// limit capture operation to 1 video clip of low quality
<syntaxhighlight lang="javascript">// حصر عدد عمليات التصوير في فيديو واحد بجودةٍ منخفضة
var options = { limit: 1, quality: 0 };
var options = { limit: 1, quality: 0 };
navigator.device.capture.captureVideo(captureSuccess, captureError, options);‎</syntaxhighlight>  
navigator.device.capture.captureVideo(captureSuccess, captureError, options);‎</syntaxhighlight>  


==CaptureCB==  
==<code>CaptureCB</code>==  
يُستدعى رد النداء CaptureCB بعد عملية التقاط أو تصوير وسيط (media) بنجاح.  
يُستدعى رد النداء <code>CaptureCB</code> بعد مرور عمليةِ التقاط أو تصوير وسيطٍ (media) بنجاحٍ.  
<syntaxhighlight lang="javascript">function captureSuccess( MediaFile[] mediaFiles ) { ... };‎</syntaxhighlight>  
<syntaxhighlight lang="javascript">function captureSuccess( MediaFile[] mediaFiles ) { ... };‎</syntaxhighlight>  
===الوصف===  
===الوصف===  


تُنفذ هذه الدالة بعد اكتمال عملية الالتقاط ينجاح. عند هذه النقطة، يكون ملف الوسائط (media file) قد التُقِط، وإما أن يكون المستخدم قد خرج من تطبيق التقاط الوسائط، أو أنّ حد الالتقاط قد بُلِغ.  
تُنفذ هذه الدالة بعد اكتمال عملية الالتقاط ينجاح. عند هذه النقطة، يكون ملف الوسائط (media file) قد التُقِط، وهذا يعني إمّا أنّ المستخدمَ قد خرج من تطبيق التقاط الوسائط، أو أنّه قد تم بلوغ الحد الأقصى للالتقاط.  


كل كائنٍ <code>MediaFile</code> يصف ملف وسائطٍ مُلتقطٍ.  
كل كائنٍ من كائنات <code>MediaFile</code> يصف أحد ملفات الوسائط المُلتقطة.  
=== مثال ===  
=== مثال ===  
<syntaxhighlight lang="javascript">// capture callback
<syntaxhighlight lang="javascript">// رد نداء الالتقاط
function captureSuccess(mediaFiles) {
function captureSuccess(mediaFiles) {
     var i, path, len;
     var i, path, len;
     for (i = 0, len = mediaFiles.length; i < len; i += 1) {
     for (i = 0, len = mediaFiles.length; i < len; i += 1) {
         path = mediaFiles[i].fullPath;
         path = mediaFiles[i].fullPath;
         // do something interesting with the file
         // افعل شيئا ما بالملف
     }
     }
};‎</syntaxhighlight>  
};‎</syntaxhighlight>  


==CaptureError==  
==<code>CaptureError</code>==  
يغلف هذا الكائن رمز الخطأ الناتج عن عملية التقاط وسائطَ فاشلةٍ.  
يغلف هذا الكائن رمز الخطأ الناتج عن عمليةٍ فاشلةٍ للالتقاط الوسائط.  
=== خاصيات ===  
=== خاصيات ===  
* <code>code</code>: أحد رموز الخطأ المحددة مسبقًا (انظر أدناه).  
* <code>code</code>: أحد رموز الخطأ المحددة مسبقًا (انظر أدناه).  
===ثوابت===  
===ثوابت===  
* <code>CaptureError.CAPTURE_INTERNAL_ERR</code>: فشلت الكاميرا أو الميكروفون في التقاط الصورة أوالصوت.  
* <code>CaptureError.CAPTURE_INTERNAL_ERR</code>: فشلت الكاميرا أو الميكروفون في التقاط الصورة أو الصوت.  
* <code>CaptureError.CAPTURE_APPLICATION_BUSY</code>: تطبيق التقاط الكاميرا أو الصوت يخدم حاليًا طلبية (request) التقاطٍ أخرى.  
* <code>CaptureError.CAPTURE_APPLICATION_BUSY</code>: تطبيق التقاط الكاميرا أو الصوت مشغول حاليًا بخدمة طلبية (request) التقاطٍ أخرى.  
* <code>CaptureError.CAPTURE_INVALID_ARGUMENT</code>: استخدام غير صالح للواجهة البرمجية (على سبيل المثال، قيمة <code>limit</code> أصغر من واحد).  
* <code>CaptureError.CAPTURE_INVALID_ARGUMENT</code>: استخدام غير صالح للواجهة البرمجية (على سبيل المثال، قيمة <code>limit</code> أصغر من واحد).  
* <code>CaptureError.CAPTURE_NO_MEDIA_FILES</code>: المستخدم من أنهى تطبيق تسجيل الصوت أو الصورة قبل التقاط أي شيء.  
* <code>CaptureError.CAPTURE_NO_MEDIA_FILES</code>: المستخدم أنهى تطبيق تسجيل الصوت أو الصورة قبل التقاط أي شيء.  
* <code>CaptureError.CAPTURE_PERMISSION_DENIED</code>: المستخدم لا يملك إذن تنفيذ طلبية الالتقاط المحددة.  
* <code>CaptureError.CAPTURE_PERMISSION_DENIED</code>: المستخدم لا يملك إذن تنفيذ طلبية الالتقاط المحددة.  
* <code>CaptureError.CAPTURE_NOT_SUPPORTED</code>: عملية الالتقاط المطلوبة غير مدعومة.  
* <code>CaptureError.CAPTURE_NOT_SUPPORTED</code>: عملية الالتقاط المطلوبة غير مدعومة.  


==CaptureErrorCB==  
==<code>CaptureErrorCB</code>==  
يُستدعى رد النداء CaptureErrorCB في حالة حدوث خطأ أثناء عملية التقاط الوسائط.  
يُستدعى رد النداء <code>CaptureErrorCB</code> في حالة حدوث خطأ أثناء عملية التقاط الوسائط.  
<syntaxhighlight lang="javascript">function captureError( CaptureError error ) { ... };‎</syntaxhighlight>  
<syntaxhighlight lang="javascript">function captureError( CaptureError error ) { ... };‎</syntaxhighlight>  
===الوصف===  
===الوصف===  


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


تنفذ هذه الدالة مع إعطائها كائنًا <code>CaptureError</code> يحتوي على الخطأ المقابل <code>code</code>.  
تنفذ هذه الدالة مع إعطائها كائنًا <code>CaptureError</code> يحتوي على رمز الخطأ المقابل <code>code</code>.  
=== مثال ===  
=== مثال ===  
<syntaxhighlight lang="javascript">// capture error callback
<syntaxhighlight lang="javascript">// رد نداء الخطأ الخاص بالالتقاط
var captureError = function(error) {
var captureError = function(error) {
     navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
     navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
};‎</syntaxhighlight>  
};‎</syntaxhighlight>  


==(ConfigurationData []‎)==  
==<code>ConfigurationData</code>==  
يغلّف هذا الكائن مجموعة من معاملات التقاط الوسائط التي يدعمها الجهاز.  
يغلّف هذا الكائن مجموعة من معاملات التقاط الوسائط المدعومة من الجهاز.  
===الوصف===  
===الوصف===  


يتضمّن الكائن ConfigurationData بيانات حول أوضاع التقاط الوسائط (media capture modes) التي يدعمها الجهاز. تتضمن بيانات الإعدادا نوع الوسائط MIME، وأبعاد الفيديوهات أو الصور الملتقطة.  
يتضمّن الكائن <code>ConfigurationData</code> بياناتٍ حول أوضاع التقاط الوسائط (media capture modes) التي يدعمها الجهاز. تتضمن بيانات الإعدادا نوع الوسائط MIME، وأبعاد الفيديوهات أو الصور الملتقطة.  


يجب أن تلتزم أنواع MIME بالمعيار [http://www.ietf.org/rfc/rfc2046.txt RFC2046]. أمثلة  
يجب أن تلتزم أنواع MIME بالمعيار [http://www.ietf.org/rfc/rfc2046.txt RFC2046]. من أمثلة ذلك:
*<code>video/3gpp</code>  
*<code>video/3gpp</code>  
*<code>video/quicktime</code>  
*<code>video/quicktime</code>  
سطر 273: سطر 265:
*<code>audio/wav</code>  
*<code>audio/wav</code>  
=== خاصيات ===  
=== خاصيات ===  
* <code>type</code>: السلسلة الصغيرة المشفرة بترميز ASCII التي تمثل نوع الوسائط. (DOMString)  
* <code>type</code>: تحتوي هذه الخاصية على السلسلة النصية المشفرة بترميز ASCII، والتي تمثل نوع الوسائط. (<code>DOMString</code>)  
* <code>height</code>: ارتفاع الصورة أو الفيديو بالبكسل. قيمة هذه الخاصية تساوي صفر لمقاطع الصوت. (عدد)  
* <code>height</code>: ارتفاع الصورة أو الفيديو بالبكسل. قيمة هذه الخاصية تساوي الصفر بالنسبة لمقاطع الصوت. (عدد)  
* <code>width</code>: عرض الصورة أو الفيديو بالبكسل. قيمة هذه الخاصية تساوي صفر لمقاطع الصوت. (عدد)  
* <code>width</code>: عرض الصورة أو الفيديو بالبكسل. قيمة هذه الخاصية تساوي الصفر بالنسبة لمقاطع الصوت. (عدد)  
=== مثال ===  
=== مثال ===  
<syntaxhighlight lang="javascript">// retrieve supported image modes
<syntaxhighlight lang="javascript">// الحصول على أوضاع الصور المدعومة
var imageModes = navigator.device.capture.supportedImageModes;
var imageModes = navigator.device.capture.supportedImageModes;
// Select mode that has the highest horizontal resolution
// اختيار الوضع ذي أعلى دقة في العرض
var width = 0;
var width = 0;
var selectedmode;
var selectedmode;
سطر 289: سطر 281:
}‎</syntaxhighlight>  
}‎</syntaxhighlight>  


هذا الكائن غير مدعوم من قبل أي منصة. جميع مصفوفات بيانات الإعدادات فارغة.  
هذا الكائن غير مدعوم من قبل أي منصةٍ. جميع مصفوفات بيانات الإعدادات فارغة.  


==MediaFile.getFormatData==  
==<code>MediaFile.getFormatData</code>==  
يحصل هذا التابع على معلومات التنسيق الخاصة بملف الوسائط المُلتقط.  
يعيد هذا التابع معلومات التنسيق الخاصة بملف الوسائط المُلتقط.  
<syntaxhighlight lang="javascript">mediaFile.getFormatData(
<syntaxhighlight lang="javascript">mediaFile.getFormatData(
     MediaFileDataSuccessCB successCallback,
     MediaFileDataSuccessCB successCallback,
سطر 299: سطر 291:
===الوصف===  
===الوصف===  


تحاول هذه الدالة بشكل غير متزامن استرداد معلومات التنسيق لملف الوسائط. في حالة نجاح ذلك، فسستستدعي رد النداء <code>MediaFileDataSuccessCB</code> مع إعطائه كائنٍ <code>MediaFileData</code>. إذا فشلت المحاولة، تستدعي هذه الدالة رد النداء <code>MediaFileDataErrorCB</code>.  
تحاول هذه الدالة بشكل غير متزامن استرداد معلومات التنسيق لملف الوسائط. في حالة نجاح ذلك، فسستستدعي رد النداء <code>MediaFileDataSuccessCB</code> مع إعطائه كائنًا <code>MediaFileData</code>. وإذا فشلت المحاولة، ستستدعي هذه الدالةُ رد النداء <code>MediaFileDataErrorCB</code>.  
=== المنصات المدعومة ===  
=== المنصات المدعومة ===  
*أندرويد  
*أندرويد  
سطر 312: سطر 304:


==MediaFile==  
==MediaFile==  
يغلف هذا التابع خاصيات ملف الوسائط المُلتقط .  
يغلف هذا التابع خاصيات ملف الوسائط المُلتقط.  
=== خاصيات ===  
=== خاصيات ===  
* <code>name</code>: اسم الملف، دون معلومات المسار. (DOMString)  
* <code>name</code>: اسم الملف، دون معلومات المسار. (<code>DOMString</code>)  
* <code>fullPath</code>: المسار الكامل للملف، بما في ذلك الاسم. (DOMString)  
* <code>fullPath</code>: المسار الكامل للملف، بما في ذلك الاسم. (<code>DOMString</code>)  
* <code>type</code>: نوع mime الخاص بالملف (DOMString)  
* <code>type</code>: نوع mime الخاص بالملف (<code>DOMString</code>)  
* <code>lastModifiedDate</code>: تاريخ ووقت آخر تعديل على الملف. (Date)  
* <code>lastModifiedDate</code>: تاريخ ووقت آخر تعديل على الملف. (<code>Date</code>)  
* <code>size</code>: حجم الملف بالبايت. (عدد)  
* <code>size</code>: حجم الملف بعدد البايتات. (عدد)  
===توابع===  
===توابع===  
* <code>MediaFile.getFormatData</code>: يعيد هذا التابع معلومات التنسيق الخاصة بملف الوسائط.  
* <code>MediaFile.getFormatData</code>: يعيد هذا التابع معلومات التنسيق الخاصة بملف الوسائط.  


==MediaFileData==  
==<code>MediaFileData</code>==  
يُغلّف هذا التابع معلومات التنسيق الخاصة بملف الوسائط.  
يُغلّف هذا الكائن معلومات التنسيق الخاصة بملف الوسائط.  
=== خاصيات ===  
=== خاصيات ===  
* <code>codecs</code>: التنسيق الفعلي لمحتوى الصوت والفيديو. (DOMString)  
* <code>codecs</code>: التنسيق الفعلي لمحتوى الصوت والفيديو. (<code>DOMString</code>)  
* <code>bitrate</code>: متوسط صبيب البث (bitrate) الخاص بالمحتوى. قيمة هذه الخاصية تساوي صفر للصور. (عدد)  
* <code>bitrate</code>: متوسط صبيب البث (bitrate) الخاص بالمحتوى. قيمة هذه الخاصية تساوي الصفر للصور. (عدد)  
* <code>height</code>: ارتفاع الصورة أو الفيديو بالبكسل. القيمة هي صفر لمقاطع الصوت. (عدد)  
* <code>height</code>: ارتفاع الصورة أو الفيديو بالبكسل. القيمة هي الصفر بالنسبة لمقاطع الصوت. (عدد)  
* <code>width</code>: عرض الصورة أو الفيديو بالبكسل. قيمة هذه الخاصية تساوي صفر لمقاطع الصوت (عدد)  
* <code>width</code>: عرض الصورة أو الفيديو بالبكسل. قيمة هذه الخاصية تساوي الصفر بالنسبة لمقاطع الصوت (عدد)  
* <code>duration</code>: طول مقطع الفيديو أو الصوت بالثواني. قيمة هذه الخاصية تساوي صفر بالنسبة للصور. (عدد)  
* <code>duration</code>: طول مقطع الفيديو أو الصوت بالثواني. قيمة هذه الخاصية تساوي صفر بالنسبة للصور. (عدد)  
===ملاحظات خاصة بمنصة أندرويد ===  
===ملاحظات خاصة بمنصة أندرويد ===  
سطر 336: سطر 328:
* <code>bitrate</code>: غير مدعومة، وتُعيد صفر.  
* <code>bitrate</code>: غير مدعومة، وتُعيد صفر.  
* <code>height</code>: مدعومة، لكن فقط لملفات الصور والفيديو.  
* <code>height</code>: مدعومة، لكن فقط لملفات الصور والفيديو.  
* <code>width</code>: مدعومة: لكن لملفات الصور والفيديو فقط.  
* <code>width</code>: مدعومة, لكن لملفات الصور والفيديو فقط.  
* <code>duration</code>: مدعومة، لكن لملفات الصوت والفيديو فقط.  
* <code>duration</code>: مدعومة، لكن لملفات الصوت والفيديو فقط.  
== ملاحظات خاصة بمنصة iOS ==  
=== ملاحظات خاصة بمنصة iOS ===  


تدعم منصة iOS خاصيات <code>MediaFileData</code> التالية:  
تدعم منصة iOS خاصيات <code>MediaFileData</code> التالية:  
* <code>codecs</code>: غير مدعومة، وتُعيد <code>null</code>.  
* <code>codecs</code>: غير مدعومة، وتُعيد <code>null</code>.  
* <code>bitrate</code>: مدعومة على أجهزة iOS4، للصوت فقط. تُعيد الصفر للصور ومقاطع الفيديو.  
* <code>bitrate</code>: مدعومة على أجهزة iOS4، للصوت فقط. فيما تُعيد الصفر للصور ومقاطع الفيديو.  
* <code>height</code>: مدعومة، لكن لملفات الصور والفيديو فقط.  
* <code>height</code>: مدعومة، لكن لملفات الصور والفيديو فقط.  
* <code>width</code>: مدعومة، لكن لملفات الصور والفيديو فقط.  
* <code>width</code>: مدعومة، لكن لملفات الصور والفيديو فقط.  
سطر 349: سطر 341:
== ملاحظات خاصة حول دورة حياة أندرويد (Android Lifecycle Quirks) ==  
== ملاحظات خاصة حول دورة حياة أندرويد (Android Lifecycle Quirks) ==  


عند تسجيل الصوت، أو التقاط الفيديوهات أو الصور على نظام أندرويد، هناك احتمال أن يُنهى التطبيق بعد إرسال [[Cordova/webviews|عارض]] كوردوفا إلى الخلفية من قِبل تطبيق الالتقاط الأصلي. راجع صفحة [http://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html#lifecycle-guide Android Lifecycle Guide] للحصول على معلومات مُفصّلة عن المشكلة. في هذه الحالة، لن يُطلق ردّا نداء النجاح أو الفشل المُمرّر إلى التابع capture، ولكن بدلاً من ذلك ستُسلّم نتائج الاستدعاء عبر حدثٍ في المستند يتم إطلاقه بعد الحدث [http://cordova.apache.org/docs/en/latest/cordova/events/events.html#resume resume event] الخاص بكوردوفا.  
عند تسجيل الصوت، أو التقاط الفيديوهات أو الصور على نظام أندرويد، هناك احتمال أن يُنهى التطبيق بعد إرسال [[Cordova/webviews|عارض]] كوردوفا إلى الخلفية من قِبل تطبيق الالتقاط الأصلي. راجع صفحة [http://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html#lifecycle-guide دليل دورة حياة أندرويد] للحصول على معلومات مُفصّلة عن هذه المشكلة.
 
في هذه الحالة، لن يُطلق ردّ نداء النجاح أو الفشل المُمرّر إلى التابع <code>capture</code>، ولكن بدلاً من ذلك ستُسلّم نتائج الاستدعاء عبر حدثٍ من أحداث المستند (document event) يتم إطلاقه بعد الحدث [https://wiki.hsoub.com/Cordova/events#resume resume] الخاص بكوردوفا.  


يجب أن يشترك تطبيقك في الحدثين المحتملين على النحو التالي:  
يجب أن يشترك تطبيقك في الحدثين المحتملين كما هو مُبيّن في المثال التالي:  
<syntaxhighlight lang="javascript">function onDeviceReady() {
<syntaxhighlight lang="javascript">function onDeviceReady() {
     // pendingcaptureresult is fired if the capture call is successful
     // capture في حال نجاح استدعاء pendingcaptureresult يُطلق الحدث
     document.addEventListener('pendingcaptureresult', function(mediaFiles) {
     document.addEventListener('pendingcaptureresult', function(mediaFiles) {
         // Do something with result
         // افعل شيئ ما بالنتيجة
     });
     });
     // pendingcaptureerror is fired if the capture call is unsuccessful
     // capture في حال فشل استدعاء pendingcaptureerror يُطلق الحدث
     document.addEventListener('pendingcaptureerror', function(error) {
     document.addEventListener('pendingcaptureerror', function(error) {
         // Handle error case
         // معالجة الخطأ
     });
     });
}
}
// Only subscribe to events after deviceready fires
// deviceready لا تشترك في الحدثين إلا بعد إطلاق الحدث
document.addEventListener('deviceready', onDeviceReady);‎</syntaxhighlight>  
document.addEventListener('deviceready', onDeviceReady);‎</syntaxhighlight>  


تتبع أي جزء من شيفرتك يُصدر هذه النتائج متروكٌ لك. تأكد من حفظ حالة تطبيقك واستعادتها في الحدثين [http://cordova.apache.org/docs/en/latest/cordova/events/events.html#pause pause] و [http://cordova.apache.org/docs/en/latest/cordova/events/events.html#resume resume] بالشكل المناسب. يرجى ملاحظة أن هذه الأحداث لن تُطلق إلا على منصة أندرويد، وفقط عندما يتم تدمير [[Cordova/webviews|العارض]] أثناء عملية الالتقاط.
تتَبُّع أيِّ أجزاء شيفرتك تصدر عنها هذه النتائج متروكٌ لك. تأكد من حفظ حالة تطبيقك واستعادتها في الحدثين [[Cordova/events#pause|pause]] و [[Cordova/events#resume|resume]] بالشكل المناسب. يرجى ملاحظة أن هذه الأحداث لن تُطلق إلا على منصة أندرويد، وفقط إذا دُمِّر [[Cordova/webviews|العارض]] أثناء عملية الالتقاط.
== انظر أيضا==
*إضافة <nowiki/>[[Cordova/cordova plugin media|تسجيل الصوت]]
*إضافة <nowiki/>[[Cordova/cordova plugin file|الوصول إلى الملفات]]
*[[Cordova/plugins|دليل تطوير الإضافات في كوردوفا]]
==مصادر==
==مصادر==
*[https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-media-capture/index.html صفحة cordova-plugin-media-capture في توثيق كوردوفا الرسمي.]
*[https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-media-capture/index.html صفحة cordova-plugin-media-capture في توثيق كوردوفا الرسمي.]

مراجعة 20:34، 21 ديسمبر 2018

تمكّن إضافة الوصول إلى الوسائط المتعددة (cordova-plugin-media-capture) من التقاط الصور وتسجيل الصوت والفيديو على الجهاز.

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

تعرّف هذه الإضافة كائنًا عامًّا navigator.device.capture. وعلى الرغم من أن هذا الكائن موجودٌ في النطاق العام (global scope)، إلا أنّه لن يكون متوفرًا إلا بعد إطلاق الحدث deviceready.

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
    console.log(navigator.device.capture);
}

التثبيت

يمكن تثبيت هذه الإضافة عبر الأمر:

cordova plugin add cordova-plugin-media-capture‎

المنصات المدعومة

  • أندرويد
  • Browser
  • iOS
  • ويندوز

الكائنات

  • Capture
  • CaptureAudioOptions
  • CaptureImageOptions
  • CaptureVideoOptions
  • CaptureCallback
  • CaptureErrorCB
  • ConfigurationData
  • MediaFile
  • MediaFileData

التوابع

  • capture.captureAudio
  • capture.captureImage
  • capture.captureVideo
  • MediaFile.getFormatData

خاصيات

  • supportedAudioModes: تمثل هذه الخاصية تنسيقات (formats) التسجيل الصوتي التي يدعمها الجهاز. (ConfigurationData[]‎)
  • supportedImageModes: أحجام وتنسيقات الصور المسجلة التي يدعمها الجهاز. (ConfigurationData []‎)
  • supportedVideoModes: دقة (resolution) الفيديوهات المُسجلة وتنسيقاتها التي يدعمها الجهاز. (ConfigurationData []‎)

capture.captureAudio

يبدأ هذا التابع تشغيل تطبيق تسجيل الصوت (audio recorder application)، ويُعيد معلومات حول الملفات الصوتية المُسجّلة.

navigator.device.capture.captureAudio(
    CaptureCB captureSuccess, CaptureErrorCB captureError,  [CaptureAudioOptions options]
);

يبدأ هذا التابع عمليةً غير متزامنةٍ لتسجيل المقطوعات الصوتية باستخدام تطبيق التسجيل الصوتي الافتراضي للجهاز. تسمح هذه العملية لمستخدم الجهاز بالتقاط عدة تسجيلات في جلسةٍ (session) واحدة.

تنتهي عملية الالتقاط عند خروج المستخدم من تطبيق التسجيل الصوتي، أو عند بلوغ الحد الأقصى من التسجيلات المحدد من قبل المعامل CaptureAudioOptions.limit. في حال عدم تمرير المعامل limit، فسيأخذ القيمة الافتراضية (1)، وستُنهى عملية الالتقاط بعد تسجيل المستخدم لمقطعٍ صوتي واحد.

عند انتهاء عملية الالتقاط، يُنفّذ رد النداء CaptureCallback، مع تمرير مصفوفة إليه تضم كائناتٍ MediaFile تحتوي معلومات وصفية لكل الملفات الصوتيةالمُلتقطة. إذا أنهى المستخدم العملية قبل التقاط أي مقطعٍ صوتي، سيُنفّذ رد النداء CaptureErrorCallback مع تمرير كائنٍ CaptureError إليه، والذي سيتضمن رمز الخطأ CaptureError.CAPTURE_NO_MEDIA_FILES.

المنصات المدعومة

  • أندرويد
  • iOS
  • ويندوز

مثال

// رد نداء الالتقاط
var captureSuccess = function(mediaFiles) {
    var i, path, len;
    for (i = 0, len = mediaFiles.length; i < len; i += 1) {
        path = mediaFiles[i].fullPath;
        // افعل شيئا ما بالملف
    }
};
// رد نداء الخطأ الخاص بالالتقاط
var captureError = function(error) {
    navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
};
// بدء تسجيل الصوت
navigator.device.capture.captureAudio(captureSuccess, captureError, {limit:2});

ملاحظات خاصة بمنصة iOS

  • لا تتوفر منصة iOS على تطبيق افتراضي لتسجيل الصوت، لذا يتم توفير واجهة مستخدم بسيطة.

ملاحظات خاصة بمنصتي Windows Phone الإصدارين 7 و 8

  • لا يحتوي Windows Phone 7 على تطبيق افتراضي لتسجيل الصوت، لذا يتم توفير واجهة مستخدم بسيطة.

capture.captureImage

يبدأ هذا التابع تشغيل تطبيق الكاميرا، ويعيد معلومات حول ملفات الصور الملتقطة.

navigator.device.capture.captureImage(
    CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options]
);

الوصف

ٍيبدأ هذا التابع عمليةً غير متزامنة لالتقاط الصور باستخدام تطبيق الكاميرا الخاص بالجهاز. تتيح هذه العملية للمستخدمين التقاط أكثر من صورة واحدة في جلسة واحدة.

تنتهي عملية الالتقاط عندما يغلق المستخدم تطبيق الكاميرا، أو عند بلوغ الحد الأقصى لعدد التسجيلات المحدد بواسطة المعامل CaptureImageOptions.limit. إذا لم تُحدّد قيمة limit، فسيتم تعيينه إلى قيمته الافتراضية (1)، وستُنهى عملية الالتقاط بعد التقاط المستخدم لصورةٍ واحدةٍ فقط.

عند انتهاء عملية الالتقاط، فسيُستدعى رد النداء CaptureCB مع إعطائه مصفوفة تضم كائنات MediaFile تحتوي معلومات وصفية عن ملفات الصور المُلتقطة. إذا أنهى المستخدم العملية قبل التقاط أي صورة، فسيُنفّذ رد النداء CaptureErrorCB مع إعطائه كائنًا CaptureError يحتوي على رمز خطأ CaptureError.CAPTURE_NO_MEDIA_FILES.

المنصات المدعومة

  • أندرويد
  • Browser
  • iOS
  • ويندوز

ملاحظات خاصة بمنصة iOS

منذ الإصدار العاشر من منصة iOS، صار من الإلزامي تقديم وصف للاستخدام في الملف info.plist إن كنت تريد الوصول إلى البيانات الحساسة. عندما يستأذن النظام المستخدم للوصول إلى تلك المعلومات، سيُعرض وصف الاستخدام ذاك كجزء من مربع حوار الاستئذان، ولكن إذا لم توفر وصف الاستخدام، فسيتعطل التطبيق قبل عرض مربع الحوار. كما سترفض Apple التطبيقات التي تحاول الوصول إلى البيانات الخاصة دون أن تقدم وصفًا للاستخدام.

تتطلب هذه الإضافة أوصاف الاستخدام التالية:

  • NSCameraUsageDescription: يحدد سبب محاولةَ التطبيقِ الوصولَ إلى كاميرا المستخدم.
  • NSMicrophoneUsageDescription: يحدد سبب محاولةَ التطبيقِ الوصولَ إلى ميكروفون المستخدم.
  • NSPhotoLibraryUsageDescriptionentry: يحدد سبب محاولة التطبيق الوصولَ إلى مكتبة الصور الخاصة بالمستخدم.

لإضافة هذه المُدخلات إلى الملف info.plist، يمكنك استخدام الوسم edit-config في الملف config.xml على النحو التالي:

<edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="merge">
    <string>need camera access to take pictures</string>
</edit-config>
<edit-config target="NSMicrophoneUsageDescription" file="*-Info.plist" mode="merge">
    <string>need microphone access to record sounds</string>
</edit-config>
<edit-config target="NSPhotoLibraryUsageDescription" file="*-Info.plist" mode="merge">
    <string>need to photo library access to get pictures from there</string>
</edit-config>

ملاحظات خاصة بالمتصفحات (Browsers)

يعمل هذا التابع على منصات Chrome و Firefox و Opera فقط (لأنّ متصفحي IE و Safari لا يدعمان الواجهة البرمجية التي تخص navigator.getUserMedia)

لا يمكن عرض الصور باستخدام عنوان URL الخاص بالملف المُلتقط إلا في متصفحي Chrome و Opera. يُخزّن متصفح Firefox الصور الملتقطة في وحدة التخزين IndexedDB (راجع توثيق إضافة الملفات)، ونتيجةً لذلك، ستكون الطريقة الوحيدة لإظهار الصورة الملتقطة هي قراءتها وعرضها باستخدام عنوان DataURL الخاص بها.

مثال

// رد نداء الالتقاط
var captureSuccess = function(mediaFiles) {
    var i, path, len;
    for (i = 0, len = mediaFiles.length; i < len; i += 1) {
        path = mediaFiles[i].fullPath;
        // افعل شيئا ما بالملف
    }
};
// رد نداء الخطأ الخاص بالالتقاط
var captureError = function(error) {
    navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
};
// بدء عملية التقاط الصورة
navigator.device.capture.captureImage(captureSuccess, captureError, {limit:2});

capture.captureVideo

يبدأ هذا التابع تشغيل تطبيق مُسجّل الفيديو (video recorder application)، ويُعيد معلومات حول ملفات الفيديو المُصوّرة.

navigator.device.capture.captureVideo(
    CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options]
);

الوصف

ٍيبدأ هذا التابع عمليةً غير متزامنة لتسجيل الفيديوهات باستخدام تطبيق تسجيل الفيديو على الجهاز. تتيح العملية للمستخدم التقاط عدة تسجيلات في جلسة واحدة.

تنتهي عملية التسجيل عند خروج المستخدم من تطبيق تسجيل الفيديو، أو عند بلوغ الحد الأقصى من التسجيلات المحدد في المعامل CaptureVideoOptions.limit. في حالة عدم تحديد قيمة المعامل limit، فسيتم تعيينها غند القيمة الافتراضية (1)، وستُنهى العملية بعد تسجيل المستخدم لمقطع فيديو واحد.

عند انتهاء عملية التصوير، يُستدعى رد النداء CaptureCB مع إعطائه مصفوفة تضم كائنات MediaFile، والتي تحتوي معلومات وصفية عن ملفات الفيديو المُصوّرة. إذا أنهى المستخدم العملية قبل التقاط أيّ مقطع فيديو، فسيُنفّذ رد النداء CaptureErrorCB مع إعطائه كائنًا CaptureError، والذي يحتوي على رمز الخطأ CaptureError.CAPTURE_NO_MEDIA_FILES.

المنصات المدعومة

  • أندرويد
  • iOS
  • ويندوز

مثال

// رد نداء الالتقاط
var captureSuccess = function(mediaFiles) {
    var i, path, len;
    for (i = 0, len = mediaFiles.length; i < len; i += 1) {
        path = mediaFiles[i].fullPath;
        // افعل شيئا ما بالملف
    }
};
// رد نداء الخطأ الخاص بالالتقاط
var captureError = function(error) {
    navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
};
// بدء تصوير الفيديو
navigator.device.capture.captureVideo(captureSuccess, captureError, {limit:2});

CaptureAudioOptions

يحتوي الكائن CaptureAudioOptions على إعدادات عمليات تسجيل الصوت.

خاصيات

  • limit: تمثل هذه الخاصية الحد الأقصى لعدد المقاطع الصوتية التي يمكن لمستخدم الجهاز تسجيلها خلال عملية تسجيلٍ واحدة. يجب أن تكون القيمة أكبر من أو تساوي 1 (القيمة الافتراضية هي 1).
  • duration: تمثل المدة القصوى للمقاطع الصوتية بالثواني.

مثال

// حصر عدد عمليات الالتقاط في 3 ملفات وسائط، بحيث لا يتجاوز أيٌّ منها 10 ثواني
var options = { limit: 3, duration: 10 };
navigator.device.capture.captureAudio(captureSuccess, captureError, options);

ملاحظات خاصة بمنصة أندرويد

  • المعامل duration غير مدعوم في منصة أندرويد. لذا لا يمكن تحديد أطوال التسجيلات برمجيا.

ملاحظات خاصة بمنصة iOS

  • المعامل limit غير مدغوم في منصة iOS، لذلك لا يمكن إنشاء إلا تسجيلة واحد عند كل استدعاء.

CaptureImageOptions

يُغلّف هذا الكائن إعدادات عملية التقاط الصور.

خاصيات

  • limit: تمثل هذه الخاصية الحد الأقصى لعدد الصور التي يمكن للمستخدم التقاطها في كل عملية التقاط. يجب أن تكون القيمة أكبر من أو تساوي 1 (القيمة الافتراضية هي 1).

مثال

// حصر عدد عمليات الالتقاط في 3 صور
var options = { limit: 3 };
navigator.device.capture.captureImage(captureSuccess, captureError, options);

ملاحظات خاصة بمنصة iOS

  • المعامل limit غير مدعوم في هذه المنصة، لذلك لا يمكن التقاط إلا صورة واحدة فقط عند كل استدعاء.

CaptureVideoOptions

يُغلّف هذا الكائن إعدادات عملية التقاط الفيديو.

خاصيات

  • limit: تمثل هذه الخاصية الحد الأقصى لعدد مقاطع الفيديو التي يمكن لمستخدم الجهاز تصويرها في كل عملية تصوير. يجب أن تكون القيمة أكبر من أو تساوي 1 (القيمة الافتراضية هي 1).
  • duration: تمثل المدة القصوى لمقطع الفيديو بالثواني.

مثال

// حصر عدد عمليات الالتقاط في 3 فيديوهات
var options = { limit: 3 };
navigator.device.capture.captureVideo(captureSuccess, captureError, options);

ملاحظات خاصة بمنصة iOS

  • يتم تجاهل الخاصية limit. لذلك لا يُسجّل إلا مقطع فيديو واحد فقط عند كل استدعاء.

ملاحظات خاصة بمنصة أندرويد

  • تدعم منصة أندرويد خاصيةً quality إضافية، للسماح بتصوير مقاطع الفيديو بجودات مختلفة. القيمة 1 (الافتراضية) تشير إلى جودة عالية، والقيمة 0 تعني جودة منخفضة، والتي تكون عادةً مناسبةً لرسائل MMS. انظر هذه الصفحة لمزيد من التفاصيل.

مثال

// حصر عدد عمليات التصوير في فيديو واحد بجودةٍ منخفضة
var options = { limit: 1, quality: 0 };
navigator.device.capture.captureVideo(captureSuccess, captureError, options);

CaptureCB

يُستدعى رد النداء CaptureCB بعد مرور عمليةِ التقاط أو تصوير وسيطٍ (media) بنجاحٍ.

function captureSuccess( MediaFile[] mediaFiles ) { ... };

الوصف

تُنفذ هذه الدالة بعد اكتمال عملية الالتقاط ينجاح. عند هذه النقطة، يكون ملف الوسائط (media file) قد التُقِط، وهذا يعني إمّا أنّ المستخدمَ قد خرج من تطبيق التقاط الوسائط، أو أنّه قد تم بلوغ الحد الأقصى للالتقاط.

كل كائنٍ من كائنات MediaFile يصف أحد ملفات الوسائط المُلتقطة.

مثال

// رد نداء الالتقاط
function captureSuccess(mediaFiles) {
    var i, path, len;
    for (i = 0, len = mediaFiles.length; i < len; i += 1) {
        path = mediaFiles[i].fullPath;
        // افعل شيئا ما بالملف
    }
};

CaptureError

يغلف هذا الكائن رمز الخطأ الناتج عن عمليةٍ فاشلةٍ للالتقاط الوسائط.

خاصيات

  • code: أحد رموز الخطأ المحددة مسبقًا (انظر أدناه).

ثوابت

  • CaptureError.CAPTURE_INTERNAL_ERR: فشلت الكاميرا أو الميكروفون في التقاط الصورة أو الصوت.
  • CaptureError.CAPTURE_APPLICATION_BUSY: تطبيق التقاط الكاميرا أو الصوت مشغول حاليًا بخدمة طلبية (request) التقاطٍ أخرى.
  • CaptureError.CAPTURE_INVALID_ARGUMENT: استخدام غير صالح للواجهة البرمجية (على سبيل المثال، قيمة limit أصغر من واحد).
  • CaptureError.CAPTURE_NO_MEDIA_FILES: المستخدم أنهى تطبيق تسجيل الصوت أو الصورة قبل التقاط أي شيء.
  • CaptureError.CAPTURE_PERMISSION_DENIED: المستخدم لا يملك إذن تنفيذ طلبية الالتقاط المحددة.
  • CaptureError.CAPTURE_NOT_SUPPORTED: عملية الالتقاط المطلوبة غير مدعومة.

CaptureErrorCB

يُستدعى رد النداء CaptureErrorCB في حالة حدوث خطأ أثناء عملية التقاط الوسائط.

function captureError( CaptureError error ) { ... };

الوصف

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

تنفذ هذه الدالة مع إعطائها كائنًا CaptureError يحتوي على رمز الخطأ المقابل code.

مثال

// رد نداء الخطأ الخاص بالالتقاط
var captureError = function(error) {
    navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
};

ConfigurationData

يغلّف هذا الكائن مجموعة من معاملات التقاط الوسائط المدعومة من الجهاز.

الوصف

يتضمّن الكائن ConfigurationData بياناتٍ حول أوضاع التقاط الوسائط (media capture modes) التي يدعمها الجهاز. تتضمن بيانات الإعدادا نوع الوسائط MIME، وأبعاد الفيديوهات أو الصور الملتقطة.

يجب أن تلتزم أنواع MIME بالمعيار RFC2046. من أمثلة ذلك:

  • video/3gpp
  • video/quicktime
  • image/jpeg
  • audio/amr
  • audio/wav

خاصيات

  • type: تحتوي هذه الخاصية على السلسلة النصية المشفرة بترميز ASCII، والتي تمثل نوع الوسائط. (DOMString)
  • height: ارتفاع الصورة أو الفيديو بالبكسل. قيمة هذه الخاصية تساوي الصفر بالنسبة لمقاطع الصوت. (عدد)
  • width: عرض الصورة أو الفيديو بالبكسل. قيمة هذه الخاصية تساوي الصفر بالنسبة لمقاطع الصوت. (عدد)

مثال

// الحصول على أوضاع الصور المدعومة
var imageModes = navigator.device.capture.supportedImageModes;
// اختيار الوضع ذي أعلى دقة في العرض
var width = 0;
var selectedmode;
for each (var mode in imageModes) {
    if (mode.width > width) {
        width = mode.width;
        selectedmode = mode;
    }
}

هذا الكائن غير مدعوم من قبل أي منصةٍ. جميع مصفوفات بيانات الإعدادات فارغة.

MediaFile.getFormatData

يعيد هذا التابع معلومات التنسيق الخاصة بملف الوسائط المُلتقط.

mediaFile.getFormatData(
    MediaFileDataSuccessCB successCallback,
    [MediaFileDataErrorCB errorCallback]
);

الوصف

تحاول هذه الدالة بشكل غير متزامن استرداد معلومات التنسيق لملف الوسائط. في حالة نجاح ذلك، فسستستدعي رد النداء MediaFileDataSuccessCB مع إعطائه كائنًا MediaFileData. وإذا فشلت المحاولة، ستستدعي هذه الدالةُ رد النداء MediaFileDataErrorCB.

المنصات المدعومة

  • أندرويد
  • iOS
  • ويندوز

ملاحظات خاصة بمنصة أندرويد

الواجهة البرمجية المُستخدمة للوصول إلى معلومات تنسيق ملفات الوسائط محدودة، لذلك ليست كل خاصيات MediaFileData مدعومة.

ملاحظات خاصة بمنصة iOS

الواجهة البرمجية للوصول إلى معلومات تنسيق ملفات الوسائط محدودة، لذلك ليست كل خاصيات MediaFileData مدعومة.

MediaFile

يغلف هذا التابع خاصيات ملف الوسائط المُلتقط.

خاصيات

  • name: اسم الملف، دون معلومات المسار. (DOMString)
  • fullPath: المسار الكامل للملف، بما في ذلك الاسم. (DOMString)
  • type: نوع mime الخاص بالملف (DOMString)
  • lastModifiedDate: تاريخ ووقت آخر تعديل على الملف. (Date)
  • size: حجم الملف بعدد البايتات. (عدد)

توابع

  • MediaFile.getFormatData: يعيد هذا التابع معلومات التنسيق الخاصة بملف الوسائط.

MediaFileData

يُغلّف هذا الكائن معلومات التنسيق الخاصة بملف الوسائط.

خاصيات

  • codecs: التنسيق الفعلي لمحتوى الصوت والفيديو. (DOMString)
  • bitrate: متوسط صبيب البث (bitrate) الخاص بالمحتوى. قيمة هذه الخاصية تساوي الصفر للصور. (عدد)
  • height: ارتفاع الصورة أو الفيديو بالبكسل. القيمة هي الصفر بالنسبة لمقاطع الصوت. (عدد)
  • width: عرض الصورة أو الفيديو بالبكسل. قيمة هذه الخاصية تساوي الصفر بالنسبة لمقاطع الصوت (عدد)
  • duration: طول مقطع الفيديو أو الصوت بالثواني. قيمة هذه الخاصية تساوي صفر بالنسبة للصور. (عدد)

ملاحظات خاصة بمنصة أندرويد

تدعم أندرويد خاصيات MediaFileData التالية:

  • codecs: غير مدعومة، وتُعيد null.
  • bitrate: غير مدعومة، وتُعيد صفر.
  • height: مدعومة، لكن فقط لملفات الصور والفيديو.
  • width: مدعومة, لكن لملفات الصور والفيديو فقط.
  • duration: مدعومة، لكن لملفات الصوت والفيديو فقط.

ملاحظات خاصة بمنصة iOS

تدعم منصة iOS خاصيات MediaFileData التالية:

  • codecs: غير مدعومة، وتُعيد null.
  • bitrate: مدعومة على أجهزة iOS4، للصوت فقط. فيما تُعيد الصفر للصور ومقاطع الفيديو.
  • height: مدعومة، لكن لملفات الصور والفيديو فقط.
  • width: مدعومة، لكن لملفات الصور والفيديو فقط.
  • duration: مدعومة، لكن لملفات الصوت والفيديو فقط.

ملاحظات خاصة حول دورة حياة أندرويد (Android Lifecycle Quirks)

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

في هذه الحالة، لن يُطلق ردّ نداء النجاح أو الفشل المُمرّر إلى التابع capture، ولكن بدلاً من ذلك ستُسلّم نتائج الاستدعاء عبر حدثٍ من أحداث المستند (document event) يتم إطلاقه بعد الحدث resume الخاص بكوردوفا.

يجب أن يشترك تطبيقك في الحدثين المحتملين كما هو مُبيّن في المثال التالي:

function onDeviceReady() {
    // capture في حال نجاح استدعاء pendingcaptureresult يُطلق الحدث
    document.addEventListener('pendingcaptureresult', function(mediaFiles) {
        // افعل شيئ ما بالنتيجة
    });
    // capture في حال فشل استدعاء pendingcaptureerror يُطلق الحدث
    document.addEventListener('pendingcaptureerror', function(error) {
        // معالجة الخطأ
    });
}
// deviceready لا تشترك في الحدثين إلا بعد إطلاق الحدث
document.addEventListener('deviceready', onDeviceReady);

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

 انظر أيضا

مصادر