iphone视频聊天代码实现
视频聊天从摄像头中取得缓冲数据,转换成NSData,通过网络发送,接收端取得NSData后把NSData转换成图像,双方不停的收发数据,播放图像,就形成了视频聊天。废话不多说,直接上代码:
首先创建视频输入输出:
NSError *error = nil;
// Setup the video input
AVCaptureDevice *videoDevice = [self getFrontCamera];//[AVCaptureDevice defaultDeviceWithMediaType: AVMediaTypeVideo];
// Create a device input with the device and add it to the session.
AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:&error];
// Setup the video output
_videoOutput = [[AVCaptureVideoDataOutput alloc] init];
_videoOutput.alwaysDiscardsLateVideoFrames = NO;
_videoOutput.videoSettings =
[NSDictionary dictionaryWithObject:
[NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey:(id)kCVPixelBufferPixelFormatTypeKey];
// Create the session
_capSession = [[AVCaptureSession alloc] init];
[_capSession addInput:videoInput];
//[_capSession addInput:audioInput];
[_capSession addOutput:_videoOutput];
//[_capSession addOutput:_audioOutput];
_capSession.sessionPreset = AVCaptureSessionPresetLow;
// Setup the queue
dispatch_queue_t queue = dispatch_queue_create("MyQueue", NULL);
[_videoOutput setSampleBufferDelegate:self queue:queue];
[_audioOutput setSampleBufferDelegate:self queue:queue];
dispatch_release(queue);
[_capSession startRunning];
通过AVCaptureVideoDataOutputSampleBufferDelegate 代理 取得摄像头数据
#pragma mark AVCaptureSession delegate
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
NSData *data = [NSData dataWithBytes:&sampleBuffer length:malloc_size(sampleBuffer)];
[self recieveVideoFromData:data];
}
收到数据后转换成图像
- (void)recieveVideoFromData:(NSData *)data{
CMSampleBufferRef sampleBuffer;
[data getBytes:&sampleBuffer length:sizeof(sampleBuffer)];
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(imageBuffer,0);
uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer);
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef newContext = CGBitmapContextCreate(baseAddress,
width, height, 8, bytesPerRow, colorSpace,
kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
CGImageRef newImage = CGBitmapContextCreateImage(newContext);
CGContextRelease(newContext);
CGColorSpaceRelease(colorSpace);
UIImage *image= [UIImage imageWithCGImage:newImage scale:1.0
orientation:UIImageOrientationRight];
CGImageRelease(newImage);
[self.imageView performSelectorOnMainThread:@selector(setImage:)
withObject:image waitUntilDone:YES];
CVPixelBufferUnlockBaseAddress(imageBuffer,0);
[pool drain];
}
iphone视频聊天代码实现相关推荐
- 即时通讯视频聊天代码和技术架构
1.简介 一款可以实现实时在线聊天的app,一对一实时在线聊天,可以实现客服功能,可以文字聊天,可以发图片聊天,简单实用 2.技术架构 3.技术选型 框架 版本号 备 ...
- FaceTime 在苹果电脑macOS与iPhone iOS上视频聊天配置步骤
FaceTime 在macOS与iPhone视频聊天配置步骤 前提,毫无疑问,你要有Apple ID. 1,在苹果电脑,到Applications目录下打开运行FaceTime 2,还是在电脑,输入你 ...
- 一对一视频直播源码实现网络中一对一视频聊天
一对一视频直播源码实现网络中一对一视频聊天 代码实现步骤 概述 首先要通信那就得满足通信的基础,我选择和目标放通信,前提就是我通过一定的条件将自己和目标建立链接,然后再将自己的通信信息交给目标,目标也 ...
- Fms3和Flex打造在线多人视频会议和视频聊天(附原代码)
Flex,Fms3系列文章导航 Flex,Fms3相关文章索引 本篇是视频聊天,会议开发实例系列文章的第3篇,该系列所有文章链接如下: http://www.cnblogs.com/aierong/a ...
- 视频聊天的java代码
2019独角兽企业重金招聘Python工程师标准>>> 最近学习Android平台下跨平台音视频通信开发,虽然网上有很多开源项目供我们参考学习,但音视频效果很一般,还有很多不稳定的因 ...
- 2w行C/C++代码打造视频聊天程序!主播直播系统程序开发
一个功能相对专业的VB聊天程序--ZX Messenger,含视频聊天模块,同时支持QQ自定义表情.音效等高级功能,代码也演示了如模仿QQ窗体弹出.托盘图标.透明窗体等网络编程技术,服务器也不需要特别 ...
- 几行代码轻松实现网页视频聊天
网络上视频主播的火热带动了网络视频聊天室开发行业的火热.现在网上企业或者工作室在弄网页的视频聊天室.通过个人学习,借用别人的开发Demo(AnyChat SDK,网上随便搜索一下就可以下载的),加上几 ...
- MMIT冠军方案 | 用于行为识别的时间交错网络,商汤公开视频理解代码库
作者 | 商汤 出品 | AI科技大本营(ID:rgznai100) 本文主要介绍三个部分: 一个高效的SOTA视频特征提取网络TIN,发表于AAAI2020 ICCV19 MMIT多标签视频理解竞赛 ...
- 如何使用OpenCV和Socket进行视频聊天?
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 一.简介 在本文中,我们要构建的是视频聊天,但话音通道使用的Ope ...
最新文章
- 淘宝内部分享:怎么跳出MySQL的10个大坑
- vsftpd日志配置及查看——可以将vsftpd记录在系统日志里
- rxjs里merge operators的用法
- Visual Studio 2019 16.1 使用 .NET Core 3.0
- Jzoj4782 Math
- 神州泰岳2050万元收买并增资奇点国际
- Jmeter之逻辑控制器(Logic Controller)
- 分数怎么在计算机上关,电脑如何在注册表上关闭AutoRun功能
- 着色器的细节层次技术 Shader Level of Detail
- 承包你所有壁纸需求,高图网图片,美到窒息
- 深度学习自学(八):人脸识别主要场景与算法实现
- PAT (Basic Level) Practice1014 福尔摩斯的约会
- 2014年武汉的IT行情好像不太好(续):20个月过后,再看当时面试过的几个公司--武汉财富基石-崩盘,辣妈萌宝-创业失败,朋友公司转交他人管理...
- 两分钟学会线性同余法产生伪随机数
- 计算机ps特效教程,制作木质电脑桌的PS滤镜教程
- VM虚拟机(VMware)设置外网连接
- JavaScript随机生成字母、数字
- Photoshop照片转手绘效果动作分享
- 深度学习刷SOTA有哪些trick?
- 阿里巴巴2016秋招内部推荐-B2B快速通道
热门文章
- OpenSSL漏洞介绍
- matplotlib绘制sin函数图像
- 【vue部署项目】前后台完全从零指南(超详细)实现简易登录跳转
- 学打羽毛心得(二) -- 基础篇
- Tongsuo/铜锁|「开放原子开源基金会」拜访篇
- Hash(哈希/散列)和Bloom Filter(布隆过滤器)
- 线性代数 --- Gram-Schmidt, 格拉姆-施密特正交化(上)
- 程序员到底有多累、多辛苦?加班如喝水,但是最累的其实不是加班
- jsp页面 用c标签来循环遍历数据库某表中里面的数据 但是页面不显示数据
- (脑肿瘤分割笔记:十四)用于脑肿瘤分割的优化U-Net