iPhone上的HTTP直播服务器

Sat*_*ima 9 streaming avfoundation node.js http-live-streaming ios

我正在尝试在iPhone上运行HTTP实时流媒体服务器,它从摄像头捕获视频流并将其提供给HTML5客户端(支持HTTP直播流).

到目前为止,我有以下工作.

  1. iOS上的HTTP Live流媒体服务器(用Node.js编写),它从视频捕获模块生成的传输流(视频/ MP2T)文件列表中动态更新索引文件.
  2. 视频捕获模块,它使用AVCaptureMovieFileOutput连续生成一系列10秒的QuickTime文件(它们之间有一个小的差距,但它对我的应用程序来说足够小).

我需要的是一个即时转换器,它将每个QuickTime文件转换为传输流文件(无需更改编码,我只需要一个不同的容器),它连接上面的两个模块.

我采用这种方法是因为这是利用iPhone硬件视频编码器的唯一方法(我在这里做了很多关于这个主题的研究,我99%肯定.请让我知道我是不是错了.

有些人建议使用ffmpeg,但我宁愿使用MIT许可证(如果有的话)使用更小的代码,或者从头开始编写代码(并使用MIT许可证开源).

我对这个媒体容器的事情很陌生,如果有人能指出我正确的方向(示例代码,开源,文档......),我真的很感激.

Mic*_*non 6

我在苹果开发者论坛上发布了这个,我们进行了热烈的(借口双关语)讨论.这是对提出类似概念的人的回答.

如果我错了,我认为纠正我,并举个例子,如果你不同意从原始h264创建一个mpeg ts你从AVCaptureVideoDataOutput获得这不是一件容易的事,除非你使用x264或类似的东西进行转码.让我们假设您可以轻松获取mpeg ts文件,然后在m3u8容器中编译它们,启动一个小型Web服务器并提供它们将是一件简单的事情.据我所知,并且有很多应用程序都这样做,使用设备中的localhost隧道不是拒绝问题.所以也许你可以以某种方式从设备中生成hls我会质疑你会得到的性能.

所以关于2号技术仍然使用AvCaptureVideoDataOutput,你捕获帧,将它们包装在一些整洁的小协议,json中,或者像bencode那样更深奥的东西打开套接字并将它们发送到你的服务器.啊...祝你好运有一个不错的强大网络,因为即使在wifi上发送未压缩的帧也需要带宽.

所以对技术3.

你使用avassetwriter写一部新电影并使用标准的c函数从temp文件中读回来,这很好,但你所拥有的是原始h264,mp4不完整因此它没有任何moov原子,现在来了有趣的部分再生这个标题.祝好运.

那么tecn​​ique 4似乎实际上有一些优点

我们创建的只有2个avassetwriters,我们使用gcd dispatch_queue来管理它们,因为在实例化之后avassetwriters只能使用一次,我们在计时器上启动第一个,在预定的时间段后说10秒我们开始第二个撕下第一个.现在我们有一系列带有完整moov原子的.mov文件,每个文件都包含压缩的h264视频.现在我们可以将它们发送到服务器并将它们组装成一个完整的视频流.或者,我们可以使用一个简单的流媒体来获取mov文件并使用librtmp将它们包装在rtmp协议中并将它们发送到媒体服务器.

我们可以将每个单独的mov文件发送到另一个苹果设备,从而获得设备到设备的通信,这个问题被多次误解,通过wifi将另一个iphone设备放在同一个子网上非常容易并且可以完成.通过celluar连接在tcp上定位另一个设备几乎是神奇的,如果它可以完成它唯一可能在使用可寻址IP的小区网络而不是所有普通运营商.

说你可以,那么你有一个额外的问题,因为非基础视频播放器将能够处理许多不同的单独电影文件之间的过渡.您可能必须根据ffmpeg解码编写自己的流媒体播放器.(那确实很好用)