
 Γράφω μια εφαρμογή Swift που στέλνει μια είσοδο βίντεο κάμερας iPhone (καρέ) μέσω του δικτύου, ώστε να μπορώ αργότερα να τις εμφανίσω σε μια εφαρμογή macOS. 

 Προς το παρόν, αρπάζω καρέ βίντεο από ένα `AVCaputreSession` και πάρτε ένα `PixelBuffer` από το `captureOutput` μέθοδος. Δεδομένου ότι κάθε πλαίσιο είναι τεράστιο (RAW pixels) μετατρέπω το `CVPixelBuffer` αυτό σε ένα `CGImage` με `VTCreateCGImageFromCVPixelBuffer` και αργότερα σε ένα `UIImage` με συμπίεση JPEG (50%). Στη συνέχεια, στέλνω αυτό το JPEG μέσω του δικτύου και το εμφανίζω στην εφαρμογή Mac OS. 

 Όπως μπορείτε να δείτε, αυτό απέχει πολύ από το ιδανικό και λειτουργεί με ταχύτητα ~ 25 FPS σε iPhone 11. Μετά από κάποια έρευνα, βρήκα την [εικόνα 2 της GPU](https://github.com/BradLarson/GPUImage2) . Φαίνεται ότι θα μπορούσα να λάβω τα δεδομένα από την κάμερα και να εφαρμόσω κάτι τέτοιο (έτσι ώστε ο μετασχηματισμός να γίνει σε GPU): 


```
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. Υπάρχει καλύτερος τρόπος για να εφαρμοστεί όλη αυτή η διαδικασία; Ίσως θα μπορούσα να χρησιμοποιήσω την κωδικοποίηση υλικού H264 του iPhone αντί να μετατρέψω εικόνες σε JPEG, αλλά φαίνεται ότι δεν είναι τόσο απλό (και φαίνεται ότι το GPUImage κάνει κάτι τέτοιο από αυτό που διάβασα). 

 Οποιαδήποτε βοήθεια εκτιμάται, ευχαριστώ εκ των προτέρων! 

 
Γρήγορη αποστολή συμπιεσμένων καρέ βίντεο χρησιμοποιώντας το GPUImage
=====================================================================



 Κατανοώ ότι θέλετε να κάνετε αυτήν τη λειτουργία σε περιβάλλον εκτός Διαδικτύου. 

 Ποιοι είναι οι περιορισμοί του έργου σας; 

1. Ελάχιστο fps;
2. Ελάχιστη ανάλυση βίντεο;
3. Πρέπει να μεταδίδεται ήχος;
4. Ποιο είναι το περιβάλλον του δικτύου σας;
5. Ελάχιστη έκδοση iOS και OSX;

 Εκτός από αυτά, το GPUImage δεν είναι η κατάλληλη λύση για εσάς. Εάν πρόκειται να μεταφέρετε βίντεο, πρέπει να κωδικοποιήσετε H264 ή H265 (HEVC) κάθε στιγμή. Με αυτόν τον τρόπο, μπορείτε να μεταδώσετε βίντεο με τρόπο απόδοσης. 

 Η λύση που κάνετε τώρα είναι CMSampleBuffer-> CVPixelBuffer-> JPEG-> Η μετατροπή δεδομένων επιβαρύνει σοβαρά τον επεξεργαστή. Αυξάνει επίσης τον κίνδυνο διαρροής μνήμης. 

 Εάν μπορείτε να πείτε λίγο, θα ήθελα να βοηθήσω. Έχω εμπειρία με την επεξεργασία βίντεο. 

 Συγνώμη για τα αγγλικά μου. 

 