从iPhone到另一台设备(浏览器或iPhone)的实时音频/视频流

时间:2011-04-19 16:23:24

标签: iphone video-streaming audio-streaming http-live-streaming

我希望从iPhone获得实时视频到另一台设备(桌面浏览器或其他iPhone,例如点对点)。

注意:这不是一对多,目前只是一对一。音频可以是流的一部分或通过iphone上的电话呼叫。

我能想到四种方式......

  1. 在iPhone上捕捉帧,发送 帧到mediaserver,有 mediaserver发布实时视频 使用主机网络服务器。

  2. 在iPhone上捕获帧,转换为 图片,发送到httpserver,有 浏览器重新加载javascript / AJAX 来自服务器的图像最快 可能的。

  3. 在iPhone上运行httpServer,捕获1秒持续时间的电影 iPhone,在iPhone上创建M3U8文件,拥有另一个 用户直接连接到iPhone上的httpServer 即时串流。

  4. 开启1秒持续时间的电影     iPhone,在iPhone上创建M3U8文件,     发送到httpServer,有另一个     用户连接到httpServer     对于liveStreaming。 This is a good answer,是否有人让它发挥作用?

  5. 是否有更好,更有效的选择? 从iPhone上获取数据的最快方法是什么?是ASIHTTPRequest吗?

    谢谢大家。

3 个答案:

答案 0 :(得分:14)

发送原始帧或单个图像对您来说永远不会有效(因为数据量和帧数)。您也无法通过电话合理地提供任何服务(WWAN网络具有各种防火墙)。您需要对视频进行编码,然后将其流式传输到服务器,最有可能采用标准流式传输格式(RTSP,RTMP)。 iPhone上有一个H.264编码器芯片> = 3GS。问题是它不是面向流的。也就是说,它输出最后解析视频所需的元数据。这为您提供了一些选择。

  1. 获取原始数据并使用FFmpeg在手机上进行编码(将使用大量的CPU和电池)。
  2. 为H.264 / AAC输出编写自己的解析器(非常难)
  3. 以块的形式记录和处理(将增加延迟等于块的长度,并在启动和停止会话时在每个块之间减少大约1/4秒的视频)。

答案 1 :(得分:5)

  

“以块的形式记录和处理(将增加延迟等于块的长度,并在启动和停止会话时在每个块之间减少大约1/4秒的视频)。”

我刚刚编写了这样的代码,但很可能通过重叠两个AVAssetWrite来消除这种差距。由于它使用硬件编码器,我强烈推荐这种方法。

答案 2 :(得分:3)

我们有类似的需求;更具体地说,我们希望实现流媒体视频和iOS设备和Web UI之间的音频。目标是在使用这些平台的参与者之间进行高质量的视频讨论。我们做了一些关于如何实现这个的研究:

  • 我们决定使用OpenTok,并设法使用OpenTok getting started guide在iPad和网站之间快速实现概念验证风格的视频聊天。还有一个PhoneGap plugin for OpenTok,对我们来说非常方便,因为我们没有使用原生iOS。

  • Liblinphone似乎也是一个潜在的解决方案,但我们没有进一步调查。

  • iDoubs也出现了,但我们再次认为OpenTok是最有希望满足我们需求的,因此没有更详细地看待iDoubs。