iPhone 上的 HTTP 直播流媒体服务器

2023-11-22

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

到目前为止,我已经完成了以下工作。

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

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

我之所以采用这种方法,是因为据我所知,这是利用 iPhone 硬件视频编码器的唯一方法(我在这里对这个主题做了相当多的研究,我 99% 确定。请让我知道我是否错了)。

有几个人建议使用 ffmpeg,但我宁愿使用具有 MIT 许可证(如果有)的更小的代码,或者从头开始编写一些东西(并使用 MIT 许可证将其开源)。

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


我将其发布在苹果开发者论坛上,我们进行了热烈的(请原谅双关语)讨论。这是对提出类似想法的人的回答。

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

接下来是技术 2 仍然使用 AvCaptureVideoDataOutput,您捕获帧,将它们包装在一些简洁的小协议、json 或可能更深奥的东西中,例如 Bencode 打开套接字并将它们发送到您的服务器。 啊...祝你好运,最好有一个强大的网络,因为即使通过 WiFi 发送未压缩的帧也需要带宽。

接下来是技术 3。

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

那么技术 4 似乎确实有一些优点

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

我们是否可以将每个单独的 mov 文件发送到另一个苹果设备,从而实现设备到设备的通信,这个问题已经被误解了很多次,通过 wifi 在同一子网上定位另一个 iphone 设备非常容易并且可以完成。通过蜂窝连接在 tcp 上定位另一个设备几乎是神奇的,如果它可以在使用可寻址 IP 的蜂窝网络上完成,而不是所有常见运营商都可以做到的话。

如果你可以,那么你还有一个额外的问题,因为没有一个 avfoundation 视频播放器能够处理许多不同的单独电影文件之间的转换。您必须编写自己的流媒体播放器,可能基于 ffmpeg 解码。 (那确实工作得很好)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iPhone 上的 HTTP 直播流媒体服务器 的相关文章

  • 从 iOS 设备向 Google App Engine 进行身份验证

    我正在开发一个 iPhone 应用程序 它使用 Google 应用程序引擎来托管后端 我需要通过 Google 进行身份验证 但我似乎无法找到从我的应用程序中执行此操作的方法 看来我要做一个UIWebView让用户登录到我从 Google
  • SKScene和SKView的paused属性之间的区别

    我使用以下代码暂停 SKScene self paused YES 然而 根据这个answer https stackoverflow com a 21593852 2043580 by 安德烈 戈尔杰耶夫 https stackoverf
  • NodeJs/WS:如何抛出服务器端在客户端处理的错误?

    当我的 websocket 有超过 2 个连接时 我试图在服务器端抛出错误 我有这个不错的客户端onerror方法 但我无法到达我的代码的那部分 我正在使用 nodeJS 和包ws其中有关于错误处理的最小文档 服务器 js theWebSo
  • 在 UITableViewCell 内动态更改标签宽度

    我正在尝试建立一个自定义表格视图 正如您在图片中看到的 我在故事板一侧将标签的宽度默认设置为 160 磅 并在加载表格时动态更改宽度 我通过修改 cellForRowAtIndexPath 委托方法来实现此目的 因此 根据日期的长度 我设置
  • 添加 AFNetworking 后出现 APPLE MACH-O 链接错误

    只是将 AFNetworking 添加到我的项目中 在 B R 后 我收到如下错误 Undefined symbols for architecture i386 SecCertificateCopyData referenced from
  • Swift 1.2 可选外部变量?

    由于 Swift 无法访问编译变量 因此我创建了一个指向编译变量的 Objective C extern 变量 编译变量转换器 h extern NSString const NetworkApiBasicAuthUsername 编译变量
  • 在node.js 0.12.x中使用libuv函数

    我写了一个node js c 插件 在node js 0 10 x下可以成功编译 但是当迁移到0 12 x时 出现了一些错误 例如error C2065 uv work t undeclared identifier 我想知道我是否可以在0
  • 在 iOS Safari 上滚动后锚点失去点击能力

    使用它来获取点击次数 nav li a click function event event preventDefault target this attr href replace goToByScroll target 这是滚动功能 f
  • 如何计算CLLocationDistance的中心坐标

    我想计算我的位置和一些注释之间的中心点 到目前为止我已经这样做了 CLLocation myLoc self locMgr location MKPointAnnotation middleAnnotation locationV anno
  • 可注入的“PlatformLocation”需要使用JIT编译器进行编译,但“@angular/compiler”不可用

    我的 Angular 应用程序通过 Node 16 13 0 提供服务 更新到 Angular 13 后 我收到以下错误 可注入 class PlatformLocation 的 JIT 编译失败 文件 Users btaylor work
  • Objective C 宏附加到字符串

    我认为这是一件非常简单的事情 但由于我是 iOS 开发和 Objective C 的新手 所以我无法弄清楚 define RESTFUL PATH PREFIX https gogch com gch restful define LOGI
  • 为什么我无法更改 UIBarButtonItem 的标题?

    我想改变UIBarButtonItem s title 但这段代码不起作用 void viewDidLoad self smay void smay AppDelegate apd AppDelegate UIApplication sha
  • 重命名猫鼬中的字段[重复]

    这个问题在这里已经有答案了 我有两个 JSON 对象 每个对象都有一个名字字段 我想将名字重命名为名称 还想使用猫鼬将现有的名字值导入到名称 Schema const mongoose require mongoose const Sche
  • 在需要时初始化模块

    我有一个模块 里面有一些初始化代码 加载模块时应执行 init 目前我正在这样做 in the module exports init function config do it in main var mod require myModu
  • admob ios7错误音频框架

    我正在将 admob SDK 当前的 集成到我的上一个应用程序 IOS7 Xcode5 中 并且出现了一个新错误 在新项目上也是如此 我想我错过了一些东西 但我多次重新启动该过程 但错误仍然存 在 Undefined symbols for
  • 如何使用固定宽度和自动布局正确缩放图像?

    我有一个动态 UIImage 和一个固定宽度为 280 0px 的 UIImageView 并且我正在使用自动布局 在 UIImage 视图上 我设置了宽度和高度约束 并降低了高度约束的优先级 我选择了 aspect fit 并将内容拥抱和
  • 猫鼬中的数组过滤器

    将查询转换为节点 arrayfilter 在 mongoose 中工作的版本或者如何在节点应用程序中运行它们 db getCollection student update id ObjectId 5a377d62d21a3025a3c3a
  • 游戏中心玩家显示名称在沙盒中始终为“我”

    我使用用户的游戏中心显示名称和玩家 ID 来维护他们在我的服务器上的个人资料 当我进行测试时 一切似乎都正确执行 但我的沙箱帐户的用户显示名称显示为 Me 而不是附加到我的帐户的显示名称 Billybobbo 这应该在沙盒模式下发生吗 Co
  • 如何清除node.js中的超时

    您好 我们正在使用 node js socket io 和 redis 开发应用程序 我们有这个程序 exports processRequest function request result var self this var time
  • iOS 11 特定设置部分的 URL 方案停止工作

    我的应用程序使用 URL 方案将用户直接带到 设置 常规 关于 部分 以下 URL 在 10 3 x 中工作正常 应用程序首选项 根 常规 路径 关于 然而 这个 URL 方案在 iOS 11 GM 版本中不再有效 它仅启动 设置 应用程序

随机推荐

  • 编译并运行ApiDemos

    我正在尝试编译Android SDK附带的Google ApiDemos 但我就是无法让它运行 这已经让我抓狂了 当我在 Eclipse 中基于示例 目标 1 5 或 1 6 创建一个新项目并尝试编译和运行时 我收到了近一千个错误 这不是我
  • WebSecurity.InitializeDatabaseConnection - 如何指定数据库架构?

    我正在使用 SimpleMembership http blog osbornm com archive 2010 07 21 using simplemembership with asp net webpages aspx 但我无法将自
  • Windows 上的 os.stat()

    属于哪些领域os stat Windows 上填充了虚拟值 python 文档对此并不清楚 特别是 什么是st inoWindows 上的产量 有人可以在 Windows 上运行交互式 python 会话并让我知道吗 我没有 Windows
  • 自动存储时长的具体要求是什么?

    根据编译器的不同 以下代码 int main srand 0 if rand char buffer 600 1024 printf buffer else char buffer 500 1024 printf buffer return
  • 对于内联函数来说,什么是好的启发式方法?

    考虑到您只是尝试优化速度 那么决定是否内联函数的良好启发式是什么 显然代码大小应该很重要 但是当 例如 gcc 或 icc 确定是否内联函数调用时通常会使用其他因素吗 该领域有任何重要的学术工作吗 维基百科有a few关于此的段落 底部有一
  • 以编程方式激活飞行模式?

    有谁知道如何在 iPhone OS 2 1 上以编程方式取消 激活飞行模式 使用公共 API 无法执行此操作 这意味着 Apple 不会批准 App Store 上执行此操作的应用程序 当然 无论如何您通常都不应该这样做 我很想听听你想到的
  • 从 android 中的图库获取图像时 android 中出现 java.lang.OutOfMemoryError

    我正在使用代码从图库中挑选一张图片 public void onCreate Bundle savedInstanceState super onCreate savedInstanceState setContentView R layo
  • EF4 Code First - 如何正确映射跨多个表拆分实体

    我正在使用 EF4 CTP5 尝试保留一个 POCO 对象 该对象分为两个表 链接是 ContactID 当我保存联系人时 我希望将核心联系人信息保存在一个表 联系人 中 并将拥有该联系人的用户的链接保存在另一个表 UserToContac
  • MongoException:不允许使用零长度键,您是否使用带双引号的 $ ?

    我正在使用 symfony2 和 mongodb 直到今天 一切正常 但是我创建一个新文档 突然出现此错误 MongoException 不允许使用零长度键 您是否使用带双引号的 dm this gt get doctrine odm mo
  • GitLab 统计问题总数

    我想使用 api 统计我的 gitlab 项目上的所有问题 下面是我正在使用的命令 curl header PRIVATE TOKEN xxxxxxx https gitlab myapp com api v4 groups xx issu
  • 在 Typescript 项目中导入 Matter-js

    我找到了这个文件 https www npmjs com package types matter js 我执行这一行 npm install save types matter js 在根 ts 文件中我收到错误消息 Matter 指的是
  • 如何在 Jasper Report 中组织框架,使它们完美浮动?

    在 Jasper 报告中 我有 4 个框架 下图 它们设置了一些属性 如同一个图像中所示 现在 想法是给定某些参数showBlue and showRed框架BLUE and RED分别显示或隐藏 后续帧 浮动 在前一帧之后 考虑以下顺序
  • unordered_set 非常量迭代器

    出于测试目的 我创建了一些 unordered set 并尝试迭代该集合 该集合拥有自己的类 class Student private int matrNr string name public Student const int mat
  • 使用 React、Redux 和 Axios 处理异步请求?

    我是 React JS 和 Redux 的新手 这让我难以上手 我正在尝试使用 Axios 发出 POST 请求 但无法发出请求 可能是我在容器文件中丢失了一些东西 下面是代码 查看plnkr Update 提交后我收到 redux for
  • 将列表与公共元素合并

    我有一个清单 1 1 7 2 1 10 11 12 211 446 469 3 1 10 11 12 13 4 1 11 12 13 215 5 1 15 16 6 1 15 17 216 225 我想合并具有公共元素的列表切片 并索引已合
  • 红宝石浮点精度

    据我了解 Ruby 1 9 2 浮点数的精度为 15 位十进制数字 因此 我期望舍入浮动x精确到小数点后 15 位等于x 对于此计算 情况并非如此 x 0 33 10 x x round 15 gt false 顺便说一下 四舍五入到 16
  • 在 iOS7 GM 中收到 SSL 错误 - “AddTrust 外部 CA 根”不受信任?

    我的 NSURLConnection 类中突然收到来自 iOS7 GM 的 SSL 错误 我无法访问我的任何 API 或 webView 页面 这是一个严重的紧急情况 有人可以帮我吗 错误如下 NSURLConnection CFURLCo
  • 使用事件侦听器克隆引导元素

    我正在尝试克隆一个具有引导程序提供的数据切换行为的引导程序元素 HTML div class container div
  • 我需要帮助使用 MAT 查找内存泄漏

    我正在使用 MAT 来比较两个堆转储 我每天都会进行一次堆转储 它每天都会增加大约 200 兆 我认为泄漏与 java util zip 有关 因为该表显示的内容 也因为我们最近添加了一个新进程来压缩和解压缩大量文件 见图 此时我打开支配器
  • iPhone 上的 HTTP 直播流媒体服务器

    我正在尝试在 iPhone 上运行 HTTP 实时流媒体服务器 该服务器从摄像头捕获视频流并将其提供给 HTML5 客户端 支持 HTTP 实时流媒体 到目前为止 我已经完成了以下工作 iOS 上的 HTTP Live 流媒体服务器 用 N