Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用GPUImage快速发送压缩视频帧_Ios_Swift_Cocoa_Video Streaming_Gpuimage - Fatal编程技术网

Ios 使用GPUImage快速发送压缩视频帧

Ios 使用GPUImage快速发送压缩视频帧,ios,swift,cocoa,video-streaming,gpuimage,Ios,Swift,Cocoa,Video Streaming,Gpuimage,我正在编写一个Swift应用程序,通过网络发送一个iPhone摄像头视频输入(帧),这样我以后可以在macOS应用程序上显示它们 目前,我正在从一个AVCaputreSession获取视频帧,并从captureOutput方法获取一个PixelBuffer。 由于每一帧都是巨大的(原始像素),我正在将CVPixelBuffer转换为CGImage,使用VTCreateCGImageFromCVPixelBuffer,然后再转换为使用JPEG压缩的UIImage(50%)。然后我通过网络发送JPE

我正在编写一个Swift应用程序,通过网络发送一个iPhone摄像头视频输入(帧),这样我以后可以在macOS应用程序上显示它们

目前,我正在从一个
AVCaputreSession
获取视频帧,并从
captureOutput
方法获取一个
PixelBuffer
。 由于每一帧都是巨大的(原始像素),我正在将
CVPixelBuffer
转换为
CGImage
,使用
VTCreateCGImageFromCVPixelBuffer
,然后再转换为使用JPEG压缩的
UIImage
(50%)。然后我通过网络发送JPEG,并将其显示在Mac OS应用程序上

正如你所见,这远远不够理想,在iPhone11上的运行速度约为25 FPS。经过一番研究,我想出了一个好主意。似乎我可以从相机中获取数据并应用类似的东西(以便在GPU中完成转换):

我应该能够传输UIImage并将其显示在macOS应用程序上。有没有更好的方法来实施整个过程?也许我可以使用iPhone的H264硬件编码,而不是将图像转换为JPEG格式,但这似乎不是那么简单(从我所读到的内容来看,GPUImage似乎做了类似的事情)


感谢您的帮助,提前谢谢

我知道您希望在非internet环境中执行此操作

你的项目限制是什么

  • 最低fps
  • 最低视频分辨率
  • 声音应该传播吗
  • 您的网络环境是什么
  • 最低iOS和OSX版本
  • 除此之外,GPUImage不是适合您的解决方案。如果你要传输视频,你必须时刻对H264或H265(HEVC)进行编码。通过这种方式,您可以以高性能的方式传输视频

    现在的解决方案是CMSampleBuffer->CVPixelBuffer->JPEG->数据转换,这会给处理器带来严重负担。它还增加了内存泄漏的风险

    如果你能告诉我一点,我愿意帮忙。我有视频处理的经验


    对不起,我的英语不好。

    嗨!谢谢你的回复。关于你的问题:1。至少30 fps 2。至少10803。如果我能用音频传输视频,那就太棒了。或者至少从视频4中单独发送。这是当地的环境,所以不用担心。假设一个非常高的带宽为5。我们可以使用这两个版本的最新版本是的,在H264或H265中压缩内容是理想的,但是通过网络“动态”发送内容而不将其存储到磁盘(可能这是唯一的方法)似乎是一件不平凡的事情。
    camera = try Camera(sessionPreset:AVCaptureSessionPreset640x480)
    let pictureOutput = PictureOutput()
    pictureOutput.encodedImageFormat = .JPEG
    pictureOutput.imageAvailableCallback = {image in
        // Send the picture through the network here
    }
    camera --> pictureOutput