iPhone上的HTTP实时stream媒体服务器

我试图在iPhone上运行HTTP实时stream媒体服务器,该服务器捕获来自摄像机的videostream并将其提供给HTML5客户端(它支持HTTP实时stream式传输)。

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

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

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

我正在采取这种方法,因为据我所知,这是利用iPhone的硬件video编码器的唯一方法(我在这里已经做了相当多的研究,我很确定,请让我知道我是否错了)。

less数人提出了ffmpeg,但是我宁愿使用MIT许可证(如果有的话)使用更小的代码,或者从头开始写一些东西(并且使用MIT许可证开放源代码)。

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

我在苹果开发者论坛上发布这个,我们进行一个生动的(辩解双关的)讨论。 这是对有人提出类似观念的回答。

如果我错了,我认为是正确的,给我们一个例子,如果你不同意从AVCaptureVideoDataOutput获得的原始h264创buildMPEG不是一件容易的事情,除非你使用X264或类似的代码转码。 让我们假设你可以简单地获取MPEG文件,然后在m3u8容器中编译它们,启动一个小型web服务器并为它们服务。 据我所知,有许多应用程序这样做,从设备使用本地主机隧道不是一个拒绝的问题。 所以也许不知怎的,你可以从设备生成hls我质疑你会得到的性能。

所以到2号技术仍然使用AvCaptureVideoDataOutput,你捕捉帧,包装他们在一些整洁的小协议,JSON,或者可能更benoteric像bencode打开一个套接字,并将其发送到您的服务器。 啊…好运更好有一个很好的健壮的networking,因为即使通过无线networking发送未压缩的帧将需要带宽。

所以到技术3号。

你使用avassetwriter写一个新的电影,并使用标准的c函数从临时文件中读回,这是好的,但你有什么是原始的h264,mp4是不完整的,因此它没有任何moovprimefaces,现在来有趣的部分再生这个标题。 祝你好运。

所以似乎实际上有一些优点的tecnique 4

我们创build的不是一个,而是两个avassetwriters,我们使用gcd dispatch_queue来pipe理它们,因为在实例化之后,avassetwriters只能使用一次,我们在定时器上启动第一个,在预定的时间周期之后,我们开始第二个时间撕下第一个。 现在我们有一系列完整的moovprimefaces的.mov文件,其中每个包含压缩的h264video。 现在我们可以将这些发送到服务器,并将它们组合成一个完整的videostream。 或者,我们可以使用一个简单的stream媒体文件,将mov文件包装在rtmp协议中,并使用librtmp将其发送到媒体服务器。

我们可以发送每个单独的mov文件到另一个苹果设备,从而获得设备到设备的通信,这个问题被误解了很多次,通过wifi在同一个子网上定位另一个iphone设备是非常容易的,可以做到。 通过celluar连接在tcp上定位另一个设备几乎是不可思议的,如果只能在使用可寻址ip的小区networking上完成,而不是所有普通的运营商都能做到。

假设你可以,那么你有一个额外的问题,因为非基础video播放器将能够处理在许多不同的单独的电影文件之间的过渡。 你将不得不根据ffmpeg解码编写自己的stream媒体播放器。 (多数民众赞成在相当好)

Interesting Posts