ios中的视频编码



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

我有点不知道哪些软件编码服务可以对ios设备中的原始(现场)视频片段进行编码,并将其发送到像AWS这样的服务器。在使用AVCam捕获视频后,我会使用类似ffmpeg的东西对原始视频进行动态编码,然后使用HTTPRTSP将编码的视频发送到服务器吗?或者我的概念错了?

从iOS8起,可以访问硬件支持的编码器/解码器api。要了解如何做到这一点,请观看WWDC 2014关于"直接访问视频编码和解码"的会议。简而言之,你从相机中获得像素缓冲区,将其提供给编码器,然后得到编码块,然后依次提供给你用于网络流媒体的任何库。您可能需要进行一些数据转换,然后才能使用它。据我所知,ffmpeg确实支持rtsp,所以您应该能够在访问编码帧后使用它。。。

iOS设备在MOV或MP4中捕获视频。

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

然而,手动对原始数据进行编码并不有效,因为在设备上使用硬件加速的唯一方法显然是通过AVAssetWrite来输出文件。

有一种方法可以通过读回文件并使用RTSP和RTMP等协议对其进行分组来实现实时流媒体,但这不是很直接。

您可以查看以下几种实现方式:

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

RTMP的Livu iPhone应用程序的流媒体支持库(Livu的旧库)

Livu应用程序的作者也在StackOverflow上,查看他的问答;A:https://stackoverflow.com/users/227021/steve-mcfarlin

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

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

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

  • https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/04_MediaCapture.html

除非你需要以与发送到服务器不同的质量级别在本地存储,否则你应该只记录你想要的质量级别,避免在手机上压缩,因为手机需要做很多工作,如果你能避免的话。如果你确实想在手机上存储更高质量的信息,而发送到服务器的质量更低(以加快传输速度或节省带宽),看看这个答案:

  • https://stackoverflow.com/a/5853354/334402

最新更新