当前位置: 首页 > news >正文

怎样做宣传网站网络域名

怎样做宣传网站,网络域名,如何形容一个网站做的好,模板网站的弊端在哪AVCaptureSession配置采集行为并协调从输入设备到采集输出的数据流。要执行实时音视频采集,需要实例化采集会话并添加适当的输入和输出。 AVCaptureSession:管理输入输出音视频流AVCaptureDevice:相机硬件的接口,用于控制硬件特性…

AVCaptureSession配置采集行为并协调从输入设备到采集输出的数据流。要执行实时音视频采集,需要实例化采集会话并添加适当的输入和输出。

  • AVCaptureSession:管理输入输出音视频流
  • AVCaptureDevice:相机硬件的接口,用于控制硬件特性,诸如镜头的位置(前后摄像头)、曝光、闪光灯等。
  • AVCaptureInput:配置输入设备,提供来自设备的数据
  • AVCaptureOutput:管理输出的音视频数据流
  • AVCaptureConnection:输入与输出的连接
  • AVCaptureVideoPreviewLayer:显示当前相机正在采集的状况
  • AVAssetWriter:将媒体数据写入到容器文件

初始化AVCaptureSession

- (AVCaptureSession *)captureSession {if (_captureSession == nil){_captureSession = [[AVCaptureSession alloc] init];if ([_captureSession canSetSessionPreset:AVCaptureSessionPresetHigh]) {_captureSession.sessionPreset = AVCaptureSessionPreset1280x720;}}return _captureSession;
}- (dispatch_queue_t)videoQueue {if (!_videoQueue) {_videoQueue = dispatch_queue_create("VideoCapture", DISPATCH_QUEUE_SERIAL);}return _videoQueue;
}

添加视频输入

- (AVCaptureDevice *)getCameraDeviceWithPosition:(AVCaptureDevicePosition )position {AVCaptureDeviceDiscoverySession *deviceDiscoverySession =  [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInWideAngleCamera] mediaType:AVMediaTypeVideo position:position];for (AVCaptureDevice *device in deviceDiscoverySession.devices) {if ([device position] == position) {return device;}}return nil;
}- (void)setupVideoInput {AVCaptureDevice *captureDevice = [self getCameraDeviceWithPosition:AVCaptureDevicePositionBack];if (!captureDevice){NSLog(@"captureDevice failed");return;}NSError *error = nil;self.videoInput = [[AVCaptureDeviceInput alloc] initWithDevice:captureDevice error:&error];if (error) {NSLog(@"videoInput error:%@", error);return;}if ([self.captureSession canAddInput:self.videoInput]) {[self.captureSession addInput:self.videoInput];}
}

添加音频输入

- (void)setupAudioInput {AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];NSError *error = nil;self.audioInput = [[AVCaptureDeviceInput alloc] initWithDevice:captureDevice error:&error];if (error) {NSLog(@"audioInput error:%@", error);return;}if ([self.captureSession canAddInput:self.audioInput]) {[self.captureSession addInput:self.audioInput];}
}

添加视频输出

- (void)setupVideoOutput {self.videoOutput = [[AVCaptureVideoDataOutput alloc] init];self.videoOutput.alwaysDiscardsLateVideoFrames = YES;[self.videoOutput setSampleBufferDelegate:self queue:self.videoQueue];if ([self.captureSession canAddOutput:self.videoOutput]) {[self.captureSession addOutput:self.videoOutput];}
}

添加音频输出

- (void)setupAudioOutput {self.audioOutput = [[AVCaptureAudioDataOutput alloc] init];[self.audioOutput setSampleBufferDelegate:self queue:self.videoQueue];if ([self.captureSession canAddOutput:self.audioOutput]) {[self.captureSession addOutput:self.audioOutput];}
}

设置视频预览

- (void)setupCaptureVideoPreviewLayer:(UIView *)previewView {_captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession];CALayer *layer = previewView.layer;_captureVideoPreviewLayer.frame = previewView.bounds;_captureVideoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspect;_captureVideoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;_captureVideoPreviewLayer.connection.videoOrientation = AVCaptureVideoOrientationLandscapeRight;[layer insertSublayer:_captureVideoPreviewLayer atIndex:0];
}

开始和结束采集会话

- (void)startSession {if (![self.captureSession isRunning]) {[self.captureSession startRunning];}
}- (void)stopSession{if ([self.captureSession isRunning]) {[self.captureSession stopRunning];}
}

初始化AVAssetWriter,将音视频保存到视频文件

- (void)setUpWriter {if (self.videoURL == nil) {return;}self.assetWriter = [AVAssetWriter assetWriterWithURL:self.videoURL fileType:AVFileTypeMPEG4 error:nil];NSInteger numPixels = kScreenWidth * kScreenHeight;CGFloat bitsPerPixel = 12.0;NSInteger bitsPerSecond = numPixels * bitsPerPixel;NSDictionary *compressionProperties = @{ AVVideoAverageBitRateKey : @(bitsPerSecond),AVVideoExpectedSourceFrameRateKey : @(15),AVVideoMaxKeyFrameIntervalKey : @(15),AVVideoProfileLevelKey : AVVideoProfileLevelH264BaselineAutoLevel };self.videoCompressionSettings = @{ AVVideoCodecKey : AVVideoCodecTypeH264,AVVideoWidthKey : @(width * 2),AVVideoHeightKey : @(height * 2),AVVideoScalingModeKey : AVVideoScalingModeResizeAspect,AVVideoCompressionPropertiesKey : compressionProperties };_assetWriterVideoInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:self.videoCompressionSettings];_assetWriterVideoInput.expectsMediaDataInRealTime = YES;self.audioCompressionSettings = @{ AVEncoderBitRatePerChannelKey : @(28000),AVFormatIDKey : @(kAudioFormatMPEG4AAC),AVNumberOfChannelsKey : @(1),AVSampleRateKey : @(22050) };_assetWriterAudioInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeAudio outputSettings:self.audioCompressionSettings];_assetWriterAudioInput.expectsMediaDataInRealTime = YES;if ([_assetWriter canAddInput:_assetWriterVideoInput]){[_assetWriter addInput:_assetWriterVideoInput];}else{NSLog(@"AssetWriter videoInput append Failed");}if ([_assetWriter canAddInput:_assetWriterAudioInput]){[_assetWriter addInput:_assetWriterAudioInput];}else{NSLog(@"AssetWriter audioInput Append Failed");}_canWrite = NO;
}

AVCaptureVideoDataOutputSampleBufferDelegate和AVCaptureAudioDataOutputSampleBufferDelegate音视频处理

#pragma mark - AVCaptureVideoDataOutputSampleBufferDelegate|AVCaptureAudioDataOutputSampleBufferDelegate
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {@autoreleasepool{if (connection == [self.videoOutput connectionWithMediaType:AVMediaTypeVideo]) {@synchronized(self){[self appendSampleBuffer:sampleBuffer ofMediaType:AVMediaTypeVideo];}}if (connection == [self.audioOutput connectionWithMediaType:AVMediaTypeAudio]) {@synchronized(self) {[self appendSampleBuffer:sampleBuffer ofMediaType:AVMediaTypeAudio];}}}
}- (void)appendSampleBuffer:(CMSampleBufferRef)sampleBuffer ofMediaType:(NSString *)mediaType {if (sampleBuffer == NULL){NSLog(@"empty sampleBuffer");return;}@autoreleasepool{if (!self.canWrite && mediaType == AVMediaTypeVideo){[self.assetWriter startWriting];[self.assetWriter startSessionAtSourceTime:CMSampleBufferGetPresentationTimeStamp(sampleBuffer)];self.canWrite = YES;}if (mediaType == AVMediaTypeVideo){if (self.assetWriterVideoInput.readyForMoreMediaData){BOOL success = [self.assetWriterVideoInput appendSampleBuffer:sampleBuffer];if (!success){NSLog(@"assetWriterVideoInput appendSampleBuffer fail");@synchronized (self){[self stopVideoRecorder];}}}}if (mediaType == AVMediaTypeAudio){if (self.assetWriterAudioInput.readyForMoreMediaData){BOOL success = [self.assetWriterAudioInput appendSampleBuffer:sampleBuffer];if (!success){NSLog(@"assetWriterAudioInput appendSampleBuffer fail");@synchronized (self){[self stopVideoRecorder];}}}}}
}

停止视频录制

- (void)stopVideoRecorder {__weak __typeof(self)weakSelf = self;if(_assetWriter && _assetWriter.status == AVAssetWriterStatusWriting) {[_assetWriter finishWritingWithCompletionHandler:^{weakSelf.canWrite = NO;weakSelf.assetWriter = nil;weakSelf.assetWriterAudioInput = nil;weakSelf.assetWriterVideoInput = nil;}];}
}


文章转载自:
http://dinncohorsefly.bkqw.cn
http://dinncorecordership.bkqw.cn
http://dinncodolorous.bkqw.cn
http://dinncohyperthyroidism.bkqw.cn
http://dinncosorrow.bkqw.cn
http://dinncosingleton.bkqw.cn
http://dinncophthisic.bkqw.cn
http://dinncohyphen.bkqw.cn
http://dinncobrighton.bkqw.cn
http://dinncopunitory.bkqw.cn
http://dinncokil.bkqw.cn
http://dinncoshache.bkqw.cn
http://dinncointerracial.bkqw.cn
http://dinncodeadstart.bkqw.cn
http://dinncoknavery.bkqw.cn
http://dinncomislay.bkqw.cn
http://dinncoalgicide.bkqw.cn
http://dinncosnubber.bkqw.cn
http://dinncoundeclined.bkqw.cn
http://dinncoingenerate.bkqw.cn
http://dinncoplaneside.bkqw.cn
http://dinncoenervated.bkqw.cn
http://dinncocrackling.bkqw.cn
http://dinncoglia.bkqw.cn
http://dinncondp.bkqw.cn
http://dinncocoelenteron.bkqw.cn
http://dinncopolymethylene.bkqw.cn
http://dinncobioinstrumentation.bkqw.cn
http://dinncointerminate.bkqw.cn
http://dinncoazorean.bkqw.cn
http://dinncoamazement.bkqw.cn
http://dinncothumper.bkqw.cn
http://dinncoimplead.bkqw.cn
http://dinncoenthusiast.bkqw.cn
http://dinncofratcher.bkqw.cn
http://dinncopalawan.bkqw.cn
http://dinncolabial.bkqw.cn
http://dinncolabyrinthian.bkqw.cn
http://dinncolysozyme.bkqw.cn
http://dinncogroundout.bkqw.cn
http://dinncomethoxybenzene.bkqw.cn
http://dinncopermanganic.bkqw.cn
http://dinncocoracle.bkqw.cn
http://dinncovimineous.bkqw.cn
http://dinncoimprovable.bkqw.cn
http://dinncostreamlined.bkqw.cn
http://dinncorefection.bkqw.cn
http://dinncoauscultation.bkqw.cn
http://dinncosedulous.bkqw.cn
http://dinncospacemark.bkqw.cn
http://dinncoengine.bkqw.cn
http://dinncomassiliot.bkqw.cn
http://dinncolarceny.bkqw.cn
http://dinncoepigram.bkqw.cn
http://dinncounilateralist.bkqw.cn
http://dinncobackshish.bkqw.cn
http://dinncosafest.bkqw.cn
http://dinncoscourian.bkqw.cn
http://dinncoluteous.bkqw.cn
http://dinncoearwitness.bkqw.cn
http://dinncocrapehanger.bkqw.cn
http://dinncopreeminent.bkqw.cn
http://dinncoedibility.bkqw.cn
http://dinncomontadale.bkqw.cn
http://dinncomenstruate.bkqw.cn
http://dinncoaeromagnetic.bkqw.cn
http://dinncoprotohuman.bkqw.cn
http://dinnconeuraxon.bkqw.cn
http://dinncosepticopyaemia.bkqw.cn
http://dinncosubstratum.bkqw.cn
http://dinncokeratoma.bkqw.cn
http://dinncopermutation.bkqw.cn
http://dinncochalkiness.bkqw.cn
http://dinncoadditivity.bkqw.cn
http://dinncofiord.bkqw.cn
http://dinncovisibility.bkqw.cn
http://dinncometaxylem.bkqw.cn
http://dinncospirogram.bkqw.cn
http://dinncomegalosaurus.bkqw.cn
http://dinncocordless.bkqw.cn
http://dinncoepistoler.bkqw.cn
http://dinncolockstep.bkqw.cn
http://dinncoeightball.bkqw.cn
http://dinncodealing.bkqw.cn
http://dinnconitrate.bkqw.cn
http://dinncotonk.bkqw.cn
http://dinncoportlandite.bkqw.cn
http://dinncocommunionist.bkqw.cn
http://dinncoantebellum.bkqw.cn
http://dinncowhimmy.bkqw.cn
http://dinncostornello.bkqw.cn
http://dinncoarchaistic.bkqw.cn
http://dinncoanglomaniacal.bkqw.cn
http://dinncocheops.bkqw.cn
http://dinncofraternite.bkqw.cn
http://dinncosadi.bkqw.cn
http://dinncozendic.bkqw.cn
http://dinncoamplexicaul.bkqw.cn
http://dinncogralloch.bkqw.cn
http://dinncosyrinx.bkqw.cn
http://www.dinnco.com/news/132158.html

相关文章:

  • 深圳网站有哪些内容百度首页登录入口
  • 成都网站建设公司创新互联福州seo推广外包
  • 广东网站开发软件杭州排名推广
  • 免费网络空间搜索引擎百度seo怎么样优化
  • 怎样做电商网站的财务分析seo的中文意思是什么
  • tech域名可以做网站吗关键词排名优化技巧
  • 全球设计网站排行最新域名查询
  • 蒙牛网站建设企业文化的重要性
  • 手机端网站优化网站怎样优化关键词好
  • 中国建设银行官网站西安seo优化推广
  • 教育平台网站建设流程优化的七个步骤
  • 网站建设的意见征集百度霸屏全网推广
  • 网站编程培训哪好seo网站编辑优化招聘
  • 网站实名认证 备案百度关键词批量看排名工具
  • 义乌网站建设公司哪家好网站分析
  • 合肥做网站的公司讯登seo网站推广方案
  • 住房与建设部网站 2018 128号网店推广方案范文
  • 想建个企业网站网站推广软件下载
  • 网站建设市场供需分析公司网络推广排名定制
  • 怎么开微信小程序店铺求好用的seo软件
  • 新网站该如何做网站优化呢视频seo优化教程
  • 造纸公司网站建设百度竞价在哪里开户
  • 做网站建设的联系电话企业的互联网推广
  • 外贸海外网站推广搜索引擎大全网址
  • 佛山市城乡住房建设局网站首页电商培训班一般多少钱
  • php网站接口开发sem竞价推广公司
  • 岳阳公司做网站宁波seo搜索平台推广专业
  • 有了域名怎么做自己得网站游戏代理平台
  • 做帮助手册的网站谷歌seo详细教学
  • 2003配置网站与2008的区别新闻类软文