GPUImage का उपयोग करके स्विफ्ट संकुचित वीडियो फ़्रेम भेजें

वोट
1

मैं एक स्विफ्ट ऐप लिख रहा हूं जो नेटवर्क के माध्यम से एक iPhone कैमरा वीडियो इनपुट (फ्रेम) भेजता है, इसलिए मैं बाद में उन्हें macOS ऐप पर प्रदर्शित कर सकता हूं।

वर्तमान में, मैं एक से वीडियो फ्रेम हथियाने हूँ AVCaputreSession , और मिलता है PixelBuffer वहाँ से captureOutput तरीका। चूंकि प्रत्येक फ्रेम विशाल है (रॉ पिक्सल) मैं परिवर्तित कर रहा हूं CVPixelBuffer यह एक करने के लिए CGImage साथ में VTCreateCGImageFromCVPixelBuffer और बाद में UIImage JPEG संपीड़न (50%) के साथ। मैं तब नेटवर्क के माध्यम से उस जेपीईजी को भेजता हूं और मैक ओएस ऐप पर प्रदर्शित करता हूं।

जैसा कि आप देख सकते हैं कि यह आदर्श से बहुत दूर है और एक iPhone 11 पर ~ 25 FPS पर चलता है। कुछ शोध के बाद, मैं GPU छवि 2 के साथ आया। ऐसा लगता है कि मैं कैमरे से डेटा प्राप्त कर सकता हूं और ऐसा कुछ लागू कर सकता हूं (ताकि जीपीयू में परिवर्तन हो जाए)

camera = try Camera(sessionPreset:AVCaptureSessionPreset640x480)
let pictureOutput = PictureOutput()
pictureOutput.encodedImageFormat = .JPEG
pictureOutput.imageAvailableCallback = {image in
    // Send the picture through the network here
}
camera --> pictureOutput

और मुझे उस UIImage को प्रसारित करने और macOS ऐप पर प्रदर्शित करने में सक्षम होना चाहिए। क्या इस पूरी प्रक्रिया को लागू करने का एक बेहतर तरीका है? शायद मैं JPEG में छवियों को परिवर्तित करने के बजाय iPhone के H264 हार्डवेयर एन्कोडिंग का उपयोग कर सकता हूं, लेकिन ऐसा लगता है कि यह सीधा नहीं है (और ऐसा लगता है कि GPUImage ऐसा कुछ करता है जो मैंने पढ़ा है)।

किसी भी मदद की सराहना की है, अग्रिम धन्यवाद!

18/05/2020 को 18:35
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
0

मैं समझता हूं कि आप इस ऑपरेशन को गैर-इंटरनेट वातावरण में करना चाहते हैं।

आपकी परियोजना में क्या अड़चनें हैं;

  1. न्यूनतम एफपीएस?
  2. न्यूनतम वीडियो रिज़ॉल्यूशन?
  3. क्या ध्वनि का संचार होना चाहिए?
  4. आपके नेटवर्क का वातावरण क्या है?
  5. न्यूनतम iOS और OSX संस्करण?

इनके अलावा, GPUImage आपके लिए एक उपयुक्त समाधान नहीं है। यदि आप वीडियो ट्रांसफर करने जा रहे हैं, तो आपको हर पल H264 या H265 (HEVC) को एनकोड करना होगा। इस तरह, आप वीडियो को प्रदर्शन तरीके से प्रसारित कर सकते हैं।

अब आप जो समाधान कर रहे हैं वह है CMSampleBuffer-> CVPixelBuffer-> JPEG-> डेटा रूपांतरण गंभीर रूप से प्रोसेसर पर बोझ डालता है। इससे मेमोरी लीक होने का खतरा भी बढ़ जाता है।

यदि आप थोड़ा सा बता सकते हैं, तो मैं मदद करना चाहूंगा। मुझे वीडियो प्रोसेसिंग का अनुभव है।

मेरी अंग्रेजी के लिए खेद है।

24/05/2020 को 23:59
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more