Rychlé odesílání snímků komprimovaného videa pomocí GPUImage

hlasů
1

Píšu aplikaci Swift, která prostřednictvím sítě odesílá video vstupy (snímky) fotoaparátu iPhone, takže je později mohu zobrazit v aplikaci pro MacOS.

V současné době beru video snímky z AVCaputreSession , a získejte PixelBuffer z captureOutput metoda. Protože každý snímek je obrovský (RAW pixelů), převádím CVPixelBuffer to na a CGImage s VTCreateCGImageFromCVPixelBuffer a později do UIImage s kompresí JPEG (50%). Poté posílám JPEG do sítě a zobrazuji jej v aplikaci Mac OS.

Jak vidíte, není to zdaleka ideální a běží na ~ 11 FPS na iPhonu 11. Po nějakém výzkumu jsem přišel s GPU Image 2 . Zdá se, že jsem mohl získat data z kamery a aplikovat něco takového (takže transformace se provádí v 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

A měl bych být schopen přenést tuto UIImage a zobrazit ji v aplikaci pro MacOS. Existuje lepší způsob, jak tento celý proces implementovat? Možná bych mohl použít hardwarové kódování iPhone H264 místo převodu obrázků do formátu JPEG, ale zdá se, že to není tak jednoduché (a zdá se, že GPUImage něco takového dělá z toho, co jsem četl).

Jakákoli pomoc je oceněna, díky předem!

Položena 18/05/2020 v 18:35
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Rozumím, že chcete tuto operaci provést v prostředí mimo internet.

Jaká jsou vaše omezení projektu;

  1. Minimální fps?
  2. Minimální rozlišení videa?
  3. Měl by se přenášet zvuk?
  4. Jaké je vaše síťové prostředí?
  5. Minimální verze pro iOS a OSX?

Kromě toho není GPUImage pro vás vhodným řešením. Pokud se chystáte přenášet videa, musíte zakódovat H264 nebo H265 (HEVC) v každém okamžiku. Tímto způsobem můžete přenášet video výkonným způsobem.

Řešení, které právě děláte, je CMSampleBuffer-> CVPixelBuffer-> JPEG-> Převod dat vážně zatěžuje procesor. To také zvyšuje riziko úniku paměti.

Pokud to můžete trochu říct, rád bych vám pomohl. Mám zkušenosti se zpracováním videa.

Promiň za mou angličtinu.

Odpovězeno 24/05/2020 v 23:59
zdroj uživatelem

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