سؤال

أكتب تطبيقا iPhone يحتاج إلى تسجيل الصوت من الميكروفون المدمج ثم أرسل البيانات الصوتية إلى خادم للمعالجة.

يستخدم التطبيق اتصال مأخذ التوصيل للاتصال بخادم قائمة انتظار الصوت للقيام بالتسجيل. ما أنا غير متأكد منه هو عند إرسال البيانات فعليا. تقوم خدمات قوائم انتظار الصوت بإطلاق اتصال في كل مرة تملأ فيها المخزن المؤقت مع بعض البيانات الصوتية. nsoutputstream ينطلق حدثا في كل مرة يضم مساحة متاحة.

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

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

إذن ما هي أفضل طريقة للتعامل مع هذا؟ يجب أن يكون لدي توقيت ينطلق مرارا وتكرارا معرفة ما إذا كان هناك مساحة متاحة وهناك بيانات يجب إرسالها؟ وأعتقد أيضا أنني سأحتاج إلى القيام ببعض المزامنة الخيط حتى أتمكن من تناول قطع البيانات من المخزن المؤقت الخاص بي لإرسال الشبكة ولكن أيضا إضافة قطع البيانات إلى المخزن المؤقت كعائدات التسجيل دون المخاطرة بمخاطر المخاطر العازلة.

هل كانت مفيدة؟

المحلول

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

chdatasricures. يوفر عدد قليل من المخزن المؤقت الدائري (الذي يستدعي فئات "المخزن المؤقت دائرية").

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top