广州小程序开发|广州APP开发|商城系统源码开发|新零售系统开发|社交电商小程序开发

直播带货系统开发功能讲解

2021-10-15

要想开发一个完整的直播带货系统,首先要先采集到主播的视频和音频功能,然后传入流媒体服务器。本文主要讲解如何采集主播的视频及音频功能,目前可在前置后置摄像头和焦点光标之间进行切换,直播带货系统中有独立美颜SDK,可以看到不同的你,后续将会有直播的其他功能文章。

第一:解释一下在直播带货系统中捕获音视频的步骤:

1.创建一个AVCaptureSession对象。

2.获得AVCaptureDevicel视频设备(摄像机),录音设备(话筒),注意,没有输入数据功能,仅用于调整硬件设备的配置。

3.以音频/视频硬件设备(AVCaptureDevice)为基础(AVCaptureDeviceInput)创建音频/视频硬件输入数据对象(AVCaptureDeviceInput)。

4.创建VideoDataOutput(AVCaptureVideoDataOutput)并设置SetSampleBufferDelegate来获取所收集的视频数据。

5.创建一个音频输出数据管理对象(AVCaptureAudioDataOutput)并设置SetSampleBufferDelegate来获取所收集的音频数据。

6.将数据输入对象AVCaptureDeviceInput,向媒体会话管理对象AVCaptureOutput添加数据输出对象,将音频输入与输出以及视频输入与输出自动地连接起来。

7.创建视频预览层AVCaptureVideoPreviewLayer并指定媒体会话,在显示容器layer中添加一个图层。

8.启动AVCaptureSession,只有打开后,才开始输入输出数据的传递输。

//捕捉音像。

-(void)setupCaputureVideo。

{

//1.创建捕获会话,必须具有强引用,否则将被释放。

AVCaptureSession*captureSession=[AVCaptureSessionalloc]init];

_captureSession=captureSession;

//2.取相机装置,默认为后置相机。

AVCaptureDevice*videoDevice=[selfgetVideoDevice:AVCaptureDevicePositionFront];

//3.获得音响设备。

AVCaptureDevice*audioDevice=[AVCaptureDevicedefaultDeviceWithMediaTypeAudio];

//4.创建相应的视频设备输入对象。

AVCaptureDeviceInput*videoDeviceInput=[AVCaptureDeviceInputhDevice:videoDeviceDevice:nil];

_currentVideoDeviceInput=videoDeviceInput;

//5.创建相应的音频设备输入对象。

AVCaptureDeviceInput*audioDeviceInput=[AVCaptureDeviceInputWithDevice:audioDeviceDevice:audioDeviceInput=[

//6.将加入会议。

//注意“要知道是否可以添加输入,会话不能添加空。

//6.1添加视频。

if([captureSessioncanAddInput:videoDeviceInput]{

[captureSessionaddInput:videoDeviceInput];

}

//6.2添加音频。

if([captureSessioncanAddInput:audioDeviceInput]{

[captureSessionaddInput:audioDeviceInput];

}

//7.获得视频数据输出装置。

AVCaptureVideoDataOutput*videoOutput=[AVCaptureVideoDataOutputalloc]init];

//7.1建立代理,捕捉视频样本数据。

//注意:为了获取数据,队列必须是串行队列,并且不能为空。

dispatch_queue_tvideoQueue=dispatch_queue_create("VideoCaptureQueue");

[videoOutputsetSampleBufferDelegate:selfqueue:videoQueue];

if([captureSessioncanAddOutput:videoOutput]{

[captureSessionaddOutput:videoOutput];

}

//8.获得音频数据输出装置。

AVCaptureAudioDataOutput*audioOutput=`[AVCaptureAudioDataOutputalloc]init];

//8.2建立代理,捕捉视频样本数据。

//注意:为了获取数据,队列必须是串行队列,并且不能为空。

dispatch_queue_taudioQueue=dispatch_queue_create("AudioCaptureQueue");

[audioOutputsetSampleBufferDelegate:selfqueue:audioQueue];

if([captureSessioncanAddOutput:audioOutput]{

[captureSessionaddOutput:audioOutput];

}

//9.获得视频输入和输出连接,以区分音视频数据。

_videoConnection=[videoOutputconnectionWithMediaTypeVideo];

//10.添加视频层预览。

AVCaptureVideoPreviewLayer=[AVCaptureVideoPreviewLayerlayerWithSession:captureSession];

previedLayer.frame=[UIScreenmainScreen].bounds;

[self.view.layerinsertSublayer:previedLayeratIndex:0];

previedLayer=previedLayer;

//11.发起会议。

[captureSessionstartRunning];

}

//指定照相机方向获得照相机。

-(AVCaptureDevice*)getVideoDevice:(AVCaptureDevicePosition)position。

{

NS


您已经成功复制微信号!

打开微信添加好友输入框长按粘贴添加

微信号:13302276671