从 iPhone 上传实时流媒体视频,例如 Ustream 或 Qik

2024-01-08

如何将 iPhone 上的视频直播到 Ustream 或 Qik 等服务器?我知道 Apple 有一种叫做 Http Live Streaming 的东西,但我发现的大多数资源都只讨论将视频从服务器流式传输到 iPhone。

我应该使用 Apple 的 Http Living Streaming 吗?或者是其他东西?谢谢。


据我所知,没有内置的方法可以做到这一点。正如您所说,HTTP Live Streaming 用于下载到 iPhone。

我这样做的方法是实现一个 AVCaptureSession,它有一个带有在每个帧上运行的回调的委托。该回调通过网络将每个帧发送到服务器,服务器有一个自定义设置来接收它。

这是流程:https://developer.apple.com/library/content/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/04_MediaCapture.html#//apple_ref/doc/uid/TP40010188-CH5-SW2 https://developer.apple.com/library/content/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/04_MediaCapture.html#//apple_ref/doc/uid/TP40010188-CH5-SW2

这是一些代码:

// make input device
NSError *deviceError;
AVCaptureDevice *cameraDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *inputDevice = [AVCaptureDeviceInput deviceInputWithDevice:cameraDevice error:&deviceError];

// make output device
AVCaptureVideoDataOutput *outputDevice = [[AVCaptureVideoDataOutput alloc] init];
[outputDevice setSampleBufferDelegate:self queue:dispatch_get_main_queue()];

// initialize capture session
AVCaptureSession *captureSession = [[[AVCaptureSession alloc] init] autorelease];
[captureSession addInput:inputDevice];
[captureSession addOutput:outputDevice];

// make preview layer and add so that camera's view is displayed on screen
AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession];
previewLayer.frame = view.bounds;
[view.layer addSublayer:previewLayer];

// go!
[captureSession startRunning];

然后输出设备的委托(这里是 self)必须实现回调:

-(void) captureOutput:(AVCaptureOutput*)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection*)connection
{
    CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer( sampleBuffer );
    CGSize imageSize = CVImageBufferGetEncodedSize( imageBuffer );
    // also in the 'mediaSpecific' dict of the sampleBuffer

   NSLog( @"frame captured at %.fx%.f", imageSize.width, imageSize.height );
}

编辑/更新

有几个人问如何在不将帧一一发送到服务器的情况下做到这一点。答案很复杂...

基本上,在didOutputSampleBuffer上面的函数中,您将样本添加到AVAssetWriter。实际上,我同时让三个资产编写者处于活动状态——过去、现在和未来——在不同的线程上进行管理。

过去的作者正在关闭电影文件并上传它。当前写入器正在从相机接收样本缓冲区。未来的作家正在打开一个新的电影文件并准备数据。每 5 秒,我设定past=current; current=future并重新启动序列。

然后将视频以 5 秒为单位上传到服务器。您可以将视频拼接在一起ffmpeg如果需要,或者将它们转码为 MPEG-2 传输流以进行 HTTP 直播。视频数据本身由资产编写器进行 H.264 编码,因此转码仅更改文件的标头格式。

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

从 iPhone 上传实时流媒体视频,例如 Ustream 或 Qik 的相关文章

随机推荐

  • 拦截windows打开的文件

    我正在尝试制作一个可以拦截文件打开过程的小程序 目的是当用户双击给定文件夹中的文件时 Windows会向软件发出通知 然后软件处理该请求并将文件的数据返回给Windows 也许还有另一种解决方案 例如监视 Open 消息并强制 Window
  • Android Studio -- 无法编辑文件

    我认为这是一个非常愚蠢的问题 而且我找不到任何其他类似的问题 所以我认为它真的很愚蠢 但它仍然让我发疯 我无法弄清楚这一点 因此 每次我在 Android Studio 中打开文件时 它都不会让我编辑它 就像它处于某种只读或选择模式或其他模
  • Python 列表和 foreach 访问(在内置列表中查找/替换)

    我原本以为Python是一种纯粹的引用传递语言 来自 C C 的我忍不住会想到内存管理 而且很难将它从我的脑海中抹去 因此 我尝试从 Java 的角度来考虑它 并将除原语之外的所有内容都视为按引用传递 问题 我有一个列表 其中包含一堆用户定
  • Dictionary.values() 列表与集合中查找的时间复杂度[重复]

    这个问题在这里已经有答案了 在Python中 我们知道在字典中查找键需要O 1 运行时间 但是在dictionary values 中查找的运行时间是多少 dictionary a 66 77 88 b 99 100 key a if ke
  • Three.js DoubleSided 材质不会在平面参数几何体的两侧投射阴影

    看看这个jsfiddle http jsfiddle net blwoodley 5Tr4D 1 http jsfiddle net blwoodley 5Tr4D 1 我有一个蓝色聚光灯 照射在旋转的旋转正方形上 这会给地下地面投射阴影
  • 将身高设置为 100%

    我需要将所有网页 主页除外 的正文位于http www zorglegal nl http www zorglegal nl到相同的高度 100 浏览器高度 因此右侧的棕色条从上到下全屏拉伸 我怎样才能最好地实现这一目标 html heig
  • 在 tkinter 循环中不断访问线程

    我正在尝试制作一个 GUI 来连续绘制从微处理器接收到的信号 我试图仅通过使用类来实现这一点 但失败了 因为只有 GUI 类是 oppend 的 现在我已经实现了线程 或者至少我认为我已经实现了 但每个线程只运行一次 这让我相信我不明白 t
  • 类中具有相同变量名的多重继承

    我无意中遇到了多重继承中使用的类中具有相同名称的成员变量的问题 我的基本想法是成员变量是简单的 合并 即发生多重声明 编译器甚至没有告诉我警告 请参阅下面的 MWE 我知道使用相同名称的变量是一个坏主意 所以我认为以我的方式引用它们至少是不
  • ASP.net MVC 导航栏品牌到标题文本颜色

    令人惊讶的是 要找到这个问题的答案并不容易 我想更改标题中所有操作链接的文本颜色 我试过这段代码 CSS navbar brand color black navbar brand visited color black navbar de
  • 如何在 GAE 之上运行 WebSocket 服务器?

    如何在 Google App Engine 上运行 WebSocket 服务器 是否可以 有可能吗 是否可以 No 您现在不能 因为 GAE 不允许通用入站套接字连接 每个请求也被限制为 30 秒 但这可以通过自动重新连接和会话跟踪轻松解决
  • 我可以用类定义覆盖 #id ul li 行为吗

    我有一个由 id 标识的区域 并且有一个 CSS 如下所示 id ul li margin 0 对于该区域的特定 UL 我可以覆盖边距设置吗 据我所知 id 在评估格式方面具有非常高的优先级 我努力了 myclass ul li margi
  • Rust 向量 (`Vec`) 与数组 (`[T; n]`) 的性能 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 在 Rust 中使用向量与数组相比 性能损失了多少 我所说的性能是指 元素访问的速度或迭代的速度 它们都将数据存储在线性连续数组中
  • 使用 Cython 将 Python 编译为 C

    我正在尝试编译python源代码 foo py 到 C 使用cython http cython org In foo py print Hello World 我正在运行的命令是cython foo py 问题是当使用编译 foo c 时
  • 如何配置 ocelot api-gateway net 6.0,以便将请求重定向到同一 Web 应用程序(相同主机和端口)中的控制器?

    目标框架 net 6 0 ocelot 18 0 0 程序 cs using Ocelot DependencyInjection using Ocelot Middleware var builder WebApplication Cre
  • 使用 jquery ajax json 格式,如何将查询从 .cfm 页面输出到调用 html 页面?

    我已经成功完成了返回单个字符串和 cfdump 的教程 但我需要有关返回带有项目列表的查询的语法的帮助 还有半repost https stackoverflow com questions 9195811 how do you outpu
  • 如何从 SSDT 发布脚本中删除 ALTER DATABASE 语句?

    免责声明 有类似的question https stackoverflow com questions 3468486 visual studio 2008 database project generating alter databas
  • 使用recentf强制emacs最近的文件忽略指定的文件(例如.windows和.revive)

    我一直被这样一个事实所困扰 当启用 revive el 和 windows el 退出时 它会打开一个文件并写入名为 revive 和 windows 的文件 这些文件被保存 因此它会出现在最近的文件列表中 有没有办法让它忽略这些文件或我想
  • Java 声音生成产生嘈杂的声音

    我正在使用 javax sound 来发出声音 但是当您播放它时 它们会在背景中产生某种噪音 如果您一次演奏几个音符 甚至会克服声音 这是代码 public final static double notes new double 130
  • Eclipse RCP 应用程序中的动态语言切换

    我正在开发具有本地化功能的 Eclipse RCP 应用程序 用户应该能够动态更改应用程序中使用的语言 在此语言切换期间不应重新启动应用程序 还应该可以在从左到右书写的语言和从右到左书写的语言之间切换 有没有一个 好的 方法来解决这个问题
  • 从 iPhone 上传实时流媒体视频,例如 Ustream 或 Qik

    如何将 iPhone 上的视频直播到 Ustream 或 Qik 等服务器 我知道 Apple 有一种叫做 Http Live Streaming 的东西 但我发现的大多数资源都只讨论将视频从服务器流式传输到 iPhone 我应该使用 Ap