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 ...
最新文章
- Ubuntu 14.04 64bit上解析wireshark抓包pcap文件格式和源码实现
- 皮一皮:周一之后还是周一?
- c++读取.dat文件_MySQL 数据文件类型
- 关于Linux系统中用户权限问题
- --- struts数据源配置(详解)---
- Java秒杀系统优化(高性能高并发)
- php mongo 游标超时,游标在MongoDb游标上超时错误
- 这个世界是那样的似曾相识
- COleDateTime 使用方法
- 异方差及stata命令
- Mysql SSL 2206错误
- Nebula Exchange 从Hive导入 NoSuchMethodError
- EasyExcel导出自定义下拉数据集的Excel模板文件
- win2008服务器蓝屏如何修复,win2008r2 老是蓝屏重启。
- JavaScript——调试的使用
- 聚焦·洞察 家有矿(HOME MINE)共识生态全球行圆满召开
- 微软的奥尔良项目简介
- 加州伯克利计算机科学录取,2020加州大学伯克利分校统计学录取案例。
- 不应发送ICMP差错报文的几种情况
- window驱动下载