2013-01-15 44 views
9

मैं एक उद्देश्य-सी आधारित आईओएस ऐप में प्रदर्शन समस्या के साथ मदद की तलाश में हूं।यूआई उत्तरदायी रखते हुए मैं स्वीकार्य प्रदर्शन के साथ स्क्रीन कैसे रिकॉर्ड कर सकता हूं?

मेरे पास एक आईओएस एप्लिकेशन है जो कैलियर की रेंडरइन कॉन्टेक्स्ट विधि का उपयोग कर स्क्रीन की सामग्री को कैप्चर करता है। यह AVFoundation का उपयोग कर एक वीडियो बनाने के लिए पर्याप्त स्क्रीन फ्रेम पर कब्जा करने का प्रयास करता है। उपयोगिता पर शोध उद्देश्यों के लिए स्क्रीन रिकॉर्डिंग को अन्य तत्वों के साथ जोड़ा जाता है। जबकि स्क्रीन पर कब्जा कर लिया जा रहा है, ऐप यूआईवेब व्यू की सामग्री भी प्रदर्शित कर सकता है, डेटा लाने के लिए नेटवर्क पर जा रहा है, आदि ... वेब व्यू की सामग्री मेरे नियंत्रण में नहीं है - यह मनमाने ढंग से सामग्री है वेब।

यह सेटअप काम कर रहा है लेकिन जैसा कि आप कल्पना कर सकते हैं, यह बटररी चिकनी नहीं है। चूंकि परत को मुख्य थ्रेड पर प्रस्तुत किया जाना चाहिए, इसलिए मुझे पसंद होने की तुलना में अधिक यूआई विवाद है। मैं जो करना चाहता हूं वह एक सेटअप है जहां यूआई की प्रतिक्रिया स्क्रीन कैप्चर पर प्राथमिकता दी जाती है। उदाहरण के लिए, यदि उपयोगकर्ता वेब दृश्य को स्क्रॉल कर रहा है, तो मैं रिकॉर्डिंग पर फ्रेम को एक भयानक स्क्रॉलिंग अनुभव की तुलना में छोड़ दूंगा।

मैंने डिस्पैच_सोर्स कोलेसिंग से कई तकनीकों के साथ प्रयोग किया है ताकि फ्रेम कैप्चर अनुरोधों को सीएडीस्प्ले लिंक के मुख्य कतार में ब्लॉक के रूप में सबमिट किया जा सके। अब तक वे सभी इसके बारे में प्रदर्शन करते हैं। फ़्रेम कैप्चर वर्तमान में स्क्रीन के मुख्य दृश्य के drawRect में ट्रिगर किया जा रहा है।

मैं यहां क्या पूछ रहा हूं: उपर्युक्त दिया गया है, आप कौन सी तकनीकों का सुझाव देंगे कि मैं अपने लक्ष्यों को प्राप्त करने का प्रयास करता हूं? मुझे एहसास है कि जवाब यह हो सकता है कि कोई अच्छा जवाब नहीं है ... लेकिन मैं कुछ भी कोशिश करना चाहता हूं, हालांकि यह खराब हो सकता है।

नोट: जो भी तकनीकों को ऐप स्टोर के अनुकूल होने की आवश्यकता है। CoreSurface हैक जैसे कुछ का उपयोग नहीं कर सकता है जो प्रदर्शन रिकॉर्डर का उपयोग/उपयोग करता है।

आपकी मदद के लिए धन्यवाद!

+0

क्या यह उद्देश्य-सी में किया जा रहा है? भले ही, रिकॉर्डिंग प्रक्रिया के समय के लिए यह संभव हो और यदि अंतिम अनुरोध एक्स के लिए रिकॉर्डिंग को रोकता है (संख्या चुनें) फ्रेम? मेरे पास कोई आईओएस एक्सप नहीं है, लेकिन यह पहली बात है जो दिमाग में आई है। – Jared

+0

हाय - हाँ, सभी ओब्जे-सी ... चूंकि 'बहुत लंबा' CPU अंतरों के कारण उपकरणों के बीच महत्वपूर्ण रूप से भिन्न होता है, इसलिए यह आवश्यकतानुसार कम सटीक हो सकता है। – Hunter

+0

शायद जावास्क्रिप्ट डिबॉन्स के समान कुछ करें? https://github.com/pixelspring/NKBlueprint-Obj-C-Mix- कॉल या कॉल करने से पहले संभवतः CPU उपयोग की निगरानी करें? http://stackoverflow.com/questions/12889422/ios-cpu-usage-for-each-process-using-sysctl – Jared

उत्तर

1

"चूंकि परत मुख्य धागे पर प्रस्तुत की जानी चाहिए" यह सच नहीं है, जब तक आप UIKit को स्पर्श नहीं करते हैं।

कृपया https://stackoverflow.com/a/12844171/136305

+0

क्या आपने सफलतापूर्वक इस विधि का उपयोग किया है? – Hunter

+0

मेरे प्रारंभिक परीक्षण सुझाव दे रहे हैं कि कैलियर का रेंडरइन कॉन्टेक्स्ट: पृष्ठभूमि थ्रेड पर विश्वसनीय रूप से काम नहीं करता है। यादृच्छिक दुर्घटनाओं में वृद्धि हुई है। – Hunter

+0

मुझे बैकग्राउंड थ्रेड में कोई परेशानी नहीं मिली है। वास्तव में, पृष्ठभूमि थ्रेड में एक कैलियर प्रस्तुत करना CATiledLayer दृष्टिकोण के लिए मानक अभ्यास है, जो कई ऐप्स में उपयोग किया जाता है। बस सुनिश्चित करें कि आप सीजी ... विधियों से चिपके रहें और यूआई ... विधियों से बचें। लेकिन फिर, मैंने पृष्ठभूमि में कभी वीडियो नहीं किया है। – fishinear

0

शायद आप चीजों को तेज करने के लिए आधा संकल्प रिकॉर्ड कर सकते हैं, अगर यह आवश्यकताओं को फिट करता है?

+0

आप आधे रिज़ॉल्यूशन पर स्क्रीन कैप्चर कैसे करेंगे? – Hunter

+0

@Hunter: यदि आप 'UIGraphicsGetCurrentContext'' कॉल करने से पहले 'UIGraphicsBeginImageContextWithOptions' को कॉल नहीं कर रहे हैं, तो आप रेटिना डिवाइस पर चलते समय पहले से ही एक गैर-रेटिना (यानी आधा रिज़ॉल्यूशन) छवि कैप्चर कर रहे हैं। – MusiGenesis

+0

@MusiGenesis क्या आप पैमाने की संपत्ति का जिक्र कर रहे हैं? मेरे परीक्षणों से संकेत मिलता है कि संदर्भ में अलग-अलग सामग्रियां मिल सकती हैं, जबकि कैलियर का रेंडरइन कॉन्टेक्स्ट स्केल के लिए सेट करते समय 1.0 और 2.0 दोनों के लिए समान प्रदर्शन करता प्रतीत होता है। क्या आपके पास अलग-अलग जानकारी है? – Hunter