GPUImage kullanarak hızlı bir şekilde sıkıştırılmış video çerçeveleri gönderin

oy
1

Ağ üzerinden bir iPhone kamera video girişi (kare) gönderen bir Swift uygulaması yazıyorum, böylece daha sonra bunları bir macOS uygulamasında görüntüleyebilirim.

Şu anda, video kareleri AVCaputreSession ve bir PixelBuffer -dan captureOutput yöntem. Her kare çok büyük olduğu için (RAW piksel) CVPixelBuffer buna CGImage ile VTCreateCGImageFromCVPixelBuffer ve daha sonra UIImage JPEG sıkıştırma ile (% 50). Sonra bu JPEG'i ağ üzerinden gönderiyorum ve Mac OS uygulamasında görüntülüyorum.

Gördüğünüz gibi, bu ideal olmaktan çok uzak ve bir iPhone 11'de ~ 25 FPS'de çalışıyor. Bazı araştırmalardan sonra GPU Image 2 ile geldim. Görünüşe göre kameradan veri alabilir ve böyle bir şey uygulayabiliriz (böylece dönüşüm GPU'da yapılır):

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

Ve bu UIImage'ı iletebilmeli ve macOS uygulamasında görüntüleyebilmeliyim. Tüm bu süreci uygulamanın daha iyi bir yolu var mı? Belki de görüntüleri JPEG'e dönüştürmek yerine iPhone'un H264 donanım kodlamasını kullanabilirim, ancak bu o kadar basit değil (ve GPUImage'ın okuduğumdan böyle bir şey yaptığı görünüyor).

Herhangi bir yardım takdir, şimdiden teşekkürler!

Oluştur 18/05/2020 saat 18:35
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

Bu işlemi internet dışı bir ortamda yapmak istediğinizi anlıyorum.

Proje kısıtlamalarınız nelerdir;

  1. Minimum fps?
  2. Minimum video çözünürlüğü?
  3. Ses iletilmeli mi?
  4. Ağ ortamınız nedir?
  5. Minimum iOS ve OSX sürümü?

Bunların dışında GPUImage sizin için uygun bir çözüm değildir. Videoları aktaracaksanız, her an H264 veya H265'i (HEVC) kodlamanız gerekir. Bu şekilde videoyu performans yoluyla iletebilirsiniz.

Şu anda yaptığınız çözüm CMSampleBuffer-> CVPixelBuffer-> JPEG-> Veri dönüştürme işlemciye ciddi yük getirmektedir. Ayrıca bellek sızıntısı riskini artırır.

Biraz söyleyebilirsen, yardım etmek isterim. Video işleme konusunda deneyimim var.

İngilizcem için üzgünüm.

Cevap 24/05/2020 saat 23:59
kaynak kullanıcı

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