A Swift küld tömörített videokereteket a GPUImage használatával

szavazat
1

Olyan Swift alkalmazást írok, amely egy iPhone kamera videobemenetet (keretet) küld a hálózaton keresztül, így később megjeleníthetem őket egy macOS alkalmazásban.

Jelenleg egy videofilmet keresek AVCaputreSession , és kap egy PixelBuffer tól captureOutput eljárás. Mivel minden képkocka hatalmas (RAW pixel) konvertálom a CVPixelBuffer hogy a CGImage val vel VTCreateCGImageFromCVPixelBuffer és később a UIImage JPEG-tömörítéssel (50%). Ezután elküldöm a JPEG-et a hálózaton keresztül, és megjelenítem a Mac OS alkalmazásban.

Mint láthatja, ez messze nem ideális, és ~ 25 FPS sebességgel fut egy iPhone 11-en. Néhány kutatás után felállítottam a GPU Image 2-et . Úgy tűnik, beszerezhetem az adatokat a fényképezőgépről, és alkalmazhatom valami ilyesmit (hogy az átalakítás GPU-ban történjen):

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

És képesnek kell lennem arra, hogy továbbítsam az UII-képet, és megjelenítsem azt a macOS alkalmazásban. Van-e jobb módja ennek az egész folyamatnak a végrehajtására? Talán felhasználhatnám az iPhone H264 hardverkódolását a JPEG formátumú konvertálás helyett, de úgy tűnik, hogy ez nem olyan egyszerű (és úgy tűnik, hogy a GPUImage valami ilyesmit csinál az általam olvasott alapján).

Minden segítséget nagyra értékelünk, előre köszönöm!

A kérdést 18/05/2020 18:35
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

Megértem, hogy ezt a műveletet nem internetes környezetben szeretné elvégezni.

Melyek a projekt korlátozásai;

  1. Minimális fps?
  2. Minimális video felbontás?
  3. Hangot kell továbbítani?
  4. Mi a hálózati környezet?
  5. Minimális iOS és OSX verzió?

Ezen kívül a GPUImage nem megfelelő megoldás az Ön számára. Ha videókat kíván átadni, minden pillanatban kódolnia kell a H264 vagy a H265 (HEVC) kódot. Ilyen módon a videókat teljesítmény módon továbbíthatja.

A megoldás, amelyet most csinálsz, a CMSampleBuffer-> CVPixelBuffer-> JPEG-> Az adatok átalakítása súlyosan terheli a processzort. Ez növeli a memóriaszivárgás kockázatát is.

Ha tudsz egy kicsit mondani, szeretnék segíteni. Tapasztalataim van a videófeldolgozásban.

Bocsánat az angolom miatt.

Válaszolt 24/05/2020 23:59
a forrás felhasználó

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