【问题标题】:Video encoding in iosios中的视频编码
【发布时间】:2015-05-24 11:10:12
【问题描述】:

所以我已经知道 StackOverflow 上存在关于将 ios 设备上的实时视频流式传输到服务器的问题,但我将询问编码部分。

对于哪些软件编码服务可用于编码来自 ios 设备的原始(实时)视频片段以发送到像 AWS 这样的服务器,我有点迷茫。在使用AVCam 捕获视频后,我是否会使用ffmpeg 之类的东西对原始视频进行即时编码,然后使用HTTPRTSP 将编码后的视频发送到服务器?还是我的概念有误?

【问题讨论】:

    标签: ios video ffmpeg video-streaming live-streaming


    【解决方案1】:

    从 iOS8 开始,可以访问硬件支持的编码器/解码器 api。 要大致了解如何做到这一点,请观看“Direct Access to Video Encoding and Decoding”上的 WWDC 2014 会议。 简而言之,您从相机获取像素缓冲区,将它们馈送到编码器,然后您将编码块返回,然后您可以将其依次馈送到您用于网络流式传输的任何库。您可能需要进行一些数据转换才能使用它。 据我所知,ffmpeg 确实支持 rtsp,因此您应该能够在访问编码帧后使用它...

    【讨论】:

      【解决方案2】:

      iOS 设备以 MOV 或 MP4 格式捕获视频。

      可以使用 AVFoundation 从 iOS 设备摄像头捕获原始数据(YUV、BGRA 等)(请参阅thisthis 以及许多其他内容)。

      但是,手动编码原始数据效率不高,因为显然在设备上使用硬件加速的唯一方法是通过 AVAssetWrite 输出文件。

      有一种方法可以通过读取文件并使用RTSP和RTMP等协议将其打包来实现直播,但不是很直接。

      您可以查看一些实现,例如:

      http://www.gdcl.co.uk/2013/02/20/iOS-Video-Encoding.html 用于 RTSP

      Streaming support library for the Livu iPhone application 用于 RTMP (Livu 的旧库)

      Livu App 的作者也在 StackOverflow 上,查看他的问答: https://stackoverflow.com/users/227021/steve-mcfarlin

      【讨论】:

        【解决方案3】:

        视频在存储在 iOS 设备上时已经编码 - 编码只是一种以数字方式表示视频的方式,在大多数情况下捕获一些值来表示视频每一帧中每个像素的颜色和亮度等.

        大多数编码还包括压缩视频以节省空间的技术。这些技术包括使用某些帧作为后续帧(以及在某些情况下为前帧)的参考。例如,第一帧可能是参考帧(通常称为 I 帧),而对于接下来的五帧,不是存储所有像素数据,而是仅存储发生变化的像素。很容易理解这如何节省大量存储空间,尤其是对于场景中几乎没有移动或变化的任何场景。

        一般来说,压缩时会损失一些质量,压缩的次数越多,损失的质量就越多。在 iOS 上,您可以在设置视频捕获时指定所需的质量级别 - 请参阅下一行中的“配置会话”:

        除非您需要以不同于发送到服务器的质量级别在本地存储,否则您应该只记录您想要的质量级别并避免在手机上进行压缩,因为这对于电话做,如果可以避免的话。如果您确实希望将更高质量存储在手机上并降低质量(以加快传输或节省带宽)发送到服务器,请查看以下答案:

        【讨论】:

        • 不知道这是不是一个愚蠢的问题,但是如果我不想将其存储在 ios 上而是通过 HTTP 或 RSTP 自动将实时流发送到服务器怎么办?
        • @abcf 我认为我们的帖子交叉了...请参阅更新答案的底部 - 简单来说,在这种情况下选择录制时所需的质量级别,以避免在压缩时进行任何额外的工作发送流媒体之前的设备。
        • @Mick,他需要直播,而不仅仅是将文件上传到服务器。
        • @aergistal - 我想我想说的是,除非需要不同的质量格式,否则最好尝试使用已经支持的捕获+编码的系统或框架满足您所需的质量(无论您是想将其流式传输还是将其存储到文件中),因为它利用了硬件并避免了客户端上的额外转码。这篇博文在 iOS 上对此进行了很好的讨论:blog.denivip.ru/index.php/2013/10/…。还请查看最后来自 Dailymotion 评论者的注释。
        • @Mick - 非常有趣的文章。还需要考虑其他变量,例如延迟。 Dailymotion 方式很有趣且可维护,但启动直播流至少需要 3 秒 + 第一个数据包的传输时间。
        猜你喜欢
        • 2011-12-20
        • 1970-01-01
        • 2017-03-12
        • 1970-01-01
        • 1970-01-01
        • 2012-06-23
        • 2013-11-10
        • 2012-10-26
        • 1970-01-01
        相关资源
        最近更新 更多