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

Jor*_*dan 16 iphone video-streaming audio-streaming http-live-streaming

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

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

我能想到的方法有四种......

  1. 在iPhone上捕获帧,将帧发送到mediaserver,让mediaserver使用主机webserver发布实时视频.

  2. 在iPhone上捕获帧,转换为图像,发送到httpserver,在浏览器中使用javascript/AJAX尽快从服务器重新加载图像.

  3. 在iPhone上运行httpServer,在iPhone上捕获1秒持续时间的电影,在iPhone上创建M3U8文件,让另一个用户直接连接到iPhone上的httpServer以进行liveStreaming.

  4. 在iPhone上捕获1秒持续时间的电影,在iPhone上创建M3U8文件,发送到httpServer,让其他用户连接到http服务器以进行liveStreaming.这是一个很好的答案,有没有人得到它的工作?

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

感谢大家.

wom*_*t57 14

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

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

  • 这里的任何人都可以给我示例代码或指南来实现这个吗? (4认同)

Sat*_*ima 5

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

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