如何从 CMSampleBufferRef 获取字节并通过网络发送

2023-12-30

Am 使用 AVFoundation 框架捕获视频。在 Apple 文档的帮助下http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/03_MediaCapture.html%23//apple_ref/doc/uid/TP40010188-CH5-SW2 http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/03_MediaCapture.html#//apple_ref/doc/uid/TP40010188-CH5-SW2

现在我做了以下事情

1.创建videoCaptureDevice
2.创建AVCaptureDeviceInput并设置videoCaptureDevice
3.创建AVCaptureVideoDataOutput并实现了委托
4.创建AVCaptureSession- 将输入设置为 AVCaptureDeviceInput 并将输出设置为 AVCaptureVideoDataOutput

5.在AVCaptureVideoDataOutput委托方法中

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection

我得到了 CMSamplebuffer 并转换为 UIImage 并测试使用打印 UIImageview

[self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];

一切顺利到此为止......

我的问题是, 我需要通过 UDP 套接字发送视频帧。尽管我尝试过以下一个是坏主意,UIImage 到 NSData 并通过 UDP Pocket 发送。但视频处理有如此延迟。主要是因为 UIImage 到 NSDate 的问题

所以请给我解决我的问题

1)有什么方法可以将 CMSampleBUffer 或 CVImageBuffer 转换为 NSData 吗?
2)像音频队列服务和视频队列一样存储UIImage并将UIImage转换为NSDate 并发送???

如果我骑在错误的算法后面请引导我写方向

提前致谢


这是获取缓冲区的代码。此代码假定平面图像(例如 BGRA)。

NSData* imageToBuffer( CMSampleBufferRef source) {
    CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(source);
    CVPixelBufferLockBaseAddress(imageBuffer,0);

    size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
    size_t width = CVPixelBufferGetWidth(imageBuffer);
    size_t height = CVPixelBufferGetHeight(imageBuffer);
    void *src_buff = CVPixelBufferGetBaseAddress(imageBuffer);

    NSData *data = [NSData dataWithBytes:src_buff length:bytesPerRow * height];

    CVPixelBufferUnlockBaseAddress(imageBuffer, 0);
    return [data autorelease];
}

更有效的方法是使用 NSMutableData 或缓冲池。

假设有 3 个颜色通道,每秒发送 480x360 图像将需要 4.1Mbps 连接。

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

如何从 CMSampleBufferRef 获取字节并通过网络发送 的相关文章

随机推荐

  • 著名:滚动视图中的滚动视图

    我正在尝试创建一个类似于 BBC 新闻本机应用程序的布局 使用known js 一个垂直的ScrollView 其中有许多水平的ScrollView 我已经 工作 到了一切都渲染并且水平滚动条完美工作的程度 我的问题是 如果用户在水平 Sc
  • 重命名文件扩展名而不指定

    我正在创建一个 bash shell 脚本 它将重命名文件扩展名 而无需指定旧的文件扩展名 如果我在 Linux 的终端中输入 change foo 它会将所有文件扩展名更改为 foo 假设我有四个文件 file1 txt file2 tx
  • 使用 Object.assign 更新嵌套对象

    我有以下对象 当用户单击按钮时 该对象将被分配一个新值 state title id imageId boarding id test work title id 我更新的对象如下所示 state title My img id 1234
  • 服务意图必须明确:意图

    我现在有一个应用程序 我在其中通过广播接收器 MyStartupIntentReceiver 调用服务 广播接收器中调用服务的代码是 public void onReceive Context context Intent intent I
  • 从 Razor 调用 ServiceStack 服务

    这里有一点边缘情况 我需要从 razor 同一网站 调用服务堆栈服务 现在我正在做 CheckIfConfiguredResponse aResponse new JsonServiceClient http localhost 2000
  • 在使用 AngularJS 的 Chrome 应用程序中,我可以直接将 ngSrc 指令用于内部图像吗?

    我正在使用 AngularJS 编写一个 Chrome 应用程序 我知道 当访问外部图像时 您必须执行跨源 XMLHttpRequest 并将它们作为 blob 提供 我有一堆内部图像 本地应用程序资源 它们遵循我想要在 ngRepeat
  • 选择容器后 JProfiler 远程进程列表为空

    我正在使用 JProfiler 12 并尝试通过 SSH 连接到 Docker 容器中的远程 JVM 进程 我已按照此处的说明进行操作 https www ej technologies com products jprofiler wha
  • 仅使用一元绑定语法表达 do 块

    据我所知 doHaskell 中的块只是一元绑定运算符的某种语法糖 例如 可以转换 main do f lt readFile foo txt print f print Finished to main readFile foo txt
  • uitableviewcell 的数据在滚动时相互重叠

    我有一个包含四个部分的表格视图 所有部分都有两个文本字段和一个位于不同行的标签 我添加了一些文本作为文本字段的占位符 最初 数据看起来很好 但是当我滚动表格视图时 单元格开始出现重叠的数据 My Code UITableViewCell t
  • 我如何检查是否已收到 Playwright 的回复?

    使用 Java 我试图等待对我正在等待的 Javascript 脚本之一的响应 我已经发现我可以使用等待响应 https playwright dev java docs api class page page wait for respo
  • React.js 中的 setState 与 refs

    我在反应中创建了选项卡 现在单击我必须更改选项卡的类 选项卡类可能如下 1 active2 上一个活动3 已选择 单击选项卡类后将变为active并在使用前检查是否已选择alreadySelected类和active最后一个活动选项卡中的类
  • 如何将多个 PNG 合并为一个大 PNG 文件?

    我有大约 6000 个 PNG 文件 256 256 像素 并希望将它们组合成一个大 PNG 以编程方式保存所有这些文件 最好 最快的方法是什么 目的是在纸上打印 因此使用某些网络技术不是一种选择 拥有一个单一的图片文件将消除许多使用错误
  • Go 中的 exec.Command() 与环境变量

    我想在 Go 中运行以下代码 out err exec Command echo PATH Output 结果是 PATH 而不是 PATH bin 的预期值 为什么 我怎样才能得到期望值 shell 没有解释您的命令 这就是预期的变量替换
  • {} + "" 与 "" + {} - 加法的一致性 [重复]

    这个问题在这里已经有答案了 前几天我在 Reddit 上偶然发现了这个 海报指出 等于0 而类似的 等于一个空 object Object 正常的数学规则告诉我这很奇怪 但为什么会这样呢 代币 语句的开头可能意味着对象文字的开始 也可能意味
  • 检索 Z3Py 中的值会产生意外结果

    我想找到一个表达式的最大间隔e对所有人来说都是如此x 编写这样的公式的方法应该是 Exists d ForAll x in d d e and ForAll x not in d d e 为了得到这样一个d 公式f在 Z3 中 看上面的 可
  • 从预先输入选择更新模型

    考虑我的正文中的以下内容html file div class container fluid div
  • Data::Dumper 中是否有相当于 Perls 的 Dumper() 方法的 C 语言?

    本质上 我正在寻找的是一个可以让我做这样的事情的函数 转储器 some obj 输出 some objs 的数据结构 Thanks C 不支持任何类型的开箱即用的反射 此外 它不是硬类型 因为一旦将其编译为机器代码 类型就不再存在 与某些高
  • ngrx - 有条件地停止/删除效果/操作

    我目前正在使用 Ionic2 和 ngrx 构建一个应用程序 如果没有网络连接 我会尝试停止某些操作 通过停止 我的意思是以某种方式使它们对其他效果和商店不可见 或阻止它们进一步 传播 有没有办法做这样的事情 Effect checkNet
  • Flutter、原生 Admob、广告加载失败:0

    https pub dev packages google mobile ads https pub dev packages google mobile ads 我复制了这个例子 除了 原生广告 之外 一切正常 当然 MainActivi
  • 如何从 CMSampleBufferRef 获取字节并通过网络发送

    Am 使用 AVFoundation 框架捕获视频 在 Apple 文档的帮助下http developer apple com library ios documentation AudioVideo Conceptual AVFound