2013-04-23 11 views
6

मैं वर्तमान में प्रीव्यूवॉलबैक का उपयोग कर रहा हूं, इसलिए जब मैं पूर्वावलोकन में हूं और उन्हें http के माध्यम से स्ट्रीम करता हूं तो मैं कैमरे से फ़्रेम कैप्चर कर सकता हूं।वीडियो रिकॉर्ड करते समय पूर्वावलोकन कॉलबैक रखना?

यह काम करता है लेकिन फिर मैं रिकॉर्डिंग शुरू करने के लिए एक आदेश जारी करता हूं और ऐसा लगता है कि मेरे पास अब पूर्वावलोकन कॉलबैक नहीं है।

तो, मैं पूर्वावलोकन कॉलबैक कैसे रखूं ताकि मैं दोनों सतह से फ्रेम को अपने सर्वर पर भेज सकूं और डिवाइस पर वीडियो रिकॉर्ड कर सकूं?

उत्तर

5

मैंने एंड्रॉइड कैमरा के साथ काफी समय तक काम नहीं किया। हालांकि, मुझे याद है के रूप में

1) onPreviewCallback नहीं बुलाया जाता है, जबकि आप

रिकॉर्ड कर रहे हैं यह सवाल की जोड़ी में उल्लेख किया गया है:

Camera onPreviewFrame not called How to show real time filtered camera preview while recording videos?

2) मैंने देखा कि यह संभाला SipDroid और कुछ अन्य एंड्रॉइड एसआईपी ग्राहकों के रास्ते में (यह 1-2 साल पहले था, इसलिए यह विधि पुरानी हो सकती है):

  • एक पाइप बनाया गया था
  • पाइप के सॉकेट प्राप्त FileDescriptor में लिपटे और MediaRecorder setOutputFile
  • के लिए पारित लगातार एक सूत्र में पढ़ा गया था पाइप के सॉकेट भेजा जा रहा है था।
  • इस तरह से आप एक सामग्री
  • पर लिखी गई सामग्री प्राप्त कर सकते हैं, अब समस्या से निपटने का तरीका (चूंकि, यह H.263 या H.264 एन्कोडेड है और ध्वनि के साथ मिश्रित किया जा सकता है, अगर आप ध्वनि के साथ वीडियो रिकॉर्ड)।
  • कुछ heuristical एल्गोरिदम, जो सामग्री (हालांकि, यह गधा में दर्द है)

3) आप उपयोग कर सकते हैं onPreviewFrame + AudioRecorder शुरू करने और यह अपने आप को सांकेतिक शब्दों में बदलना (mp4 करने के लिए ffmpeg या ऐसा ही कुछ) का उपयोग कर पार्स थे फ़ाइल। इस तरह आपको MediaRecorder रिकॉर्डिंग शुरू करने की आवश्यकता नहीं है।

1

एक बार जब मुझे कैमरे और MediaRecorder को क्रैश होने के बिना रिकॉर्डिंग शुरू करने और बंद करने के लिए मिला (आसान नहीं था) मुझे अभी भी एक समस्या है जैसा कि आपने वर्णित किया है, जहां पूर्वावलोकन कॉलबैक कॉल करना बंद कर देगा।

जिस फिक्स को मैंने अंत में पाया, वह MediaRecorder.start() के बाद setPreviewCallback पर कॉल जोड़ रहा था, और MediaRecorder.stop() के बाद दूसरा। सुनिश्चित नहीं है कि यह सही है, लेकिन यह रेजर एम पर काम करता है जिस पर मैं परीक्षण कर रहा हूं।

2

आप अपने मीडिया recorder.start के बाद इन तरीकों() कॉल कर सकते हैं निम्नलिखित के रूप में बुलाया जा रहा है:

camera.reconnect(); 
camera.setPreviewCallback(); 
surfaceview.getHolder().addCallback(); 

कारण हैं:

  1. camera.unlock के बाद() कहा जाता है, एक और प्रक्रिया (यहां मीडिया रिकॉर्डर प्रक्रिया है) कैमरा का उपयोग कर सकते हैं; जब प्रक्रिया पूरी हो जाती है, तो आपको कैमरे से फिर से कनेक्ट करना होगा, जो लॉक को पुनः प्राप्त करेगा और आपको कैमरे का उपयोग जारी रखने की अनुमति देगा।
  2. और उसके बाद कैमरे के बाद सतहदृश्य फ्रेम डेटा कॉलबैक दोबारा पंजीकृत करें, क्योंकि इसके कुछ राज्य को फिर से कनेक्ट करने के बाद बदला जा सकता है।

मैं कभी भी आपके आवेदन में आपके जैसा ही मुद्दा रहा हूं, और मैंने इसे इसके द्वारा तय किया है। उम्मीद है कि यह आपकी समस्याओं का समाधान कर सकता है!

संबंधित मुद्दे