自带的录屏功能有限,想要更多录屏相关的功能的话,可以使用【迅捷录屏大师】APP,一款专业的第三方录屏软件,功能丰富操作简单,而且还自带视频剪辑功能。
10年积累的成都做网站、成都网站设计、成都外贸网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有阿巴嘎免费网站建设让你可以放心的选择与我们合作。
迅捷录屏大师 - 手机录屏软件,好用的手机屏幕录制APP
进入软件首页,可以对视频录制进行一些设置,包括录制方向、画质模式、录制音量。
录制方向包括横屏录制、竖屏录制和自动识别,一般是都是使用自动识别,看到有人想固定横屏或者是竖屏,那你直接选择一个方向就行,下次需要换方向重新选一下就行了。
用itools录屏大师。
步骤:
1、打开【苹果录屏专家】,根据需求选择【横屏录制】或【竖屏录制】;
2、按照指示打开设备控制中心,点击【AirPlay-RecScreen-完成】即可开始录屏,点击屏幕上【结束录制】即可结束录屏;
3、在页面下方点击【视频】,可以看到已成功录制的视频,点击视频可进行剪辑(拖动白色浮标选择视频封面)和保存以及播放视频等。
注意:除了录屏之外,苹果录屏专家(RecScreen)还支持【直播】功能,不过该功能目前需要向开发者申请权限。
在itools的工具箱里点击设备管理后找到并使用苹果录屏大师。上划手机状态栏选择Airplay,点击后选择对应Airplay镜像,电脑会出现手机画面。开启PC端的直播姬功能,把【游戏源】里的的Airplay进程添加进去。选择要直播的内容,使用PC直播姬开始一键直播。
B站
早期是一个ACG(动画、漫画、游戏)内容创作与分享的视频网站。经过十年多的发展,围绕用户、创作者和内容,构建了一个源源不断产生优质内容的生态系统。
B站已经涵盖7000多个兴趣圈层的多元文化社区,曾获得QuestMobile研究院评选的“Z世代偏爱APP”和“Z世代偏爱泛娱乐APP”两项榜单第一名并入选“BrandZ”报告2019最具价值中国品牌100强。
北京时间2021年11月17日,哔哩哔哩公布了截至2021年9月30日的第三季度未经审计的财务报告。财报显示,B站三季度营收达52.1亿元人民币,同比增长61%,各项社区运营数据再创新高。
1.创建AVCaptureSession对象
2.获取AVCaptureDevicel录像设备(摄像头),录音设备(麦克风),注意不具备输入数据功能,只是用来调节硬件设备的配置。
3.根据音频/视频硬件设备(AVCaptureDevice)创建音频/视频硬件输入数据对象(AVCaptureDeviceInput),专门管理数据输入。
4.创建视频输出数据管理对象(AVCaptureVideoDataOutput),并且设置样品缓存代理(setSampleBufferDelegate)就可以通过它拿到采集到的视频数据
5.创建音频输出数据管理对象(AVCaptureAudioDataOutput),并且设置样品缓存代理(setSampleBufferDelegate)就可以通过它拿到采集到的音频数据
6.将数据输入对象AVCaptureDeviceInput、数据输出对象AVCaptureOutput添加到媒体会话管理对象AVCaptureSession中,就会自动让音频输入与输出和视频输入与输出产生连接.
7.创建视频预览图层AVCaptureVideoPreviewLayer并指定媒体会话,添加图层到显示容器layer中
8.启动AVCaptureSession,只有开启,才会开始输入到输出数据流传输。
// 捕获音视频
- (void)setupCaputureVideo
{
// 1.创建捕获会话,必须要强引用,否则会被释放
AVCaptureSession *captureSession = [[AVCaptureSession alloc] init];
_captureSession = captureSession;
// 2.获取摄像头设备,默认是后置摄像头
AVCaptureDevice *videoDevice = [self getVideoDevice:AVCaptureDevicePositionFront];
// 3.获取声音设备
AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
// 4.创建对应视频设备输入对象
AVCaptureDeviceInput *videoDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:nil];
_currentVideoDeviceInput = videoDeviceInput;
// 5.创建对应音频设备输入对象
AVCaptureDeviceInput *audioDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:nil];
// 6.添加到会话中
// 注意“最好要判断是否能添加输入,会话不能添加空的
// 6.1 添加视频
if ([captureSession canAddInput:videoDeviceInput]) {
[captureSession addInput:videoDeviceInput];
}
// 6.2 添加音频
if ([captureSession canAddInput:audioDeviceInput]) {
[captureSession addInput:audioDeviceInput];
}
// 7.获取视频数据输出设备
AVCaptureVideoDataOutput *videoOutput = [[AVCaptureVideoDataOutput alloc] init];
// 7.1 设置代理,捕获视频样品数据
// 注意:队列必须是串行队列,才能获取到数据,而且不能为空
dispatch_queue_t videoQueue = dispatch_queue_create("Video Capture Queue", DISPATCH_QUEUE_SERIAL);
[videoOutput setSampleBufferDelegate:self queue:videoQueue];
if ([captureSession canAddOutput:videoOutput]) {
[captureSession addOutput:videoOutput];
}
// 8.获取音频数据输出设备
AVCaptureAudioDataOutput *audioOutput = [[AVCaptureAudioDataOutput alloc] init];
// 8.2 设置代理,捕获视频样品数据
// 注意:队列必须是串行队列,才能获取到数据,而且不能为空
dispatch_queue_t audioQueue = dispatch_queue_create("Audio Capture Queue", DISPATCH_QUEUE_SERIAL);
[audioOutput setSampleBufferDelegate:self queue:audioQueue];
if ([captureSession canAddOutput:audioOutput]) {
[captureSession addOutput:audioOutput];
}
// 9.获取视频输入与输出连接,用于分辨音视频数据
_videoConnection = [videoOutput connectionWithMediaType:AVMediaTypeVideo];
// 10.添加视频预览图层
AVCaptureVideoPreviewLayer *previedLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession];
previedLayer.frame = [UIScreen mainScreen].bounds;
[self.view.layer insertSublayer:previedLayer atIndex:0];
_previedLayer = previedLayer;
// 11.启动会话
[captureSession startRunning];
}
// 指定摄像头方向获取摄像头
- (AVCaptureDevice *)getVideoDevice:(AVCaptureDevicePosition)position
{
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
for (AVCaptureDevice *device in devices) {
if (device.position == position) {
return device;
}
}
return nil;
}
#pragma mark - AVCaptureVideoDataOutputSampleBufferDelegate
// 获取输入设备数据,有可能是音频有可能是视频
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
if (_videoConnection == connection) {
NSLog(@"采集到视频数据");
} else {
NSLog(@"采集到音频数据");
}
}
视频采集额外功能一(切换摄像头)
切换摄像头步骤
1.获取当前视频设备输入对象
2.判断当前视频设备是前置还是后置
3.确定切换摄像头的方向
4.根据摄像头方向获取对应的摄像头设备
5.创建对应的摄像头输入对象
6.从会话中移除之前的视频输入对象
7.添加新的视频输入对象到会话中
// 切换摄像头
- (IBAction)toggleCapture:(id)sender {
// 获取当前设备方向
AVCaptureDevicePosition curPosition = _currentVideoDeviceInput.device.position;
// 获取需要改变的方向
AVCaptureDevicePosition togglePosition = curPosition == AVCaptureDevicePositionFront?AVCaptureDevicePositionBack:AVCaptureDevicePositionFront;
// 获取改变的摄像头设备
AVCaptureDevice *toggleDevice = [self getVideoDevice:togglePosition];
// 获取改变的摄像头输入设备
AVCaptureDeviceInput *toggleDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:toggleDevice error:nil];
// 移除之前摄像头输入设备
[_captureSession removeInput:_currentVideoDeviceInput];
// 添加新的摄像头输入设备
[_captureSession addInput:toggleDeviceInput];
// 记录当前摄像头输入设备
_currentVideoDeviceInput = toggleDeviceInput;
}
视频采集额外功能二(聚焦光标)
聚焦光标步骤
1.监听屏幕的点击
2.获取点击的点位置,转换为摄像头上的点,必须通过视频预览图层(AVCaptureVideoPreviewLayer)转
3.设置聚焦光标图片的位置,并做动画
4.设置摄像头设备聚焦模式和曝光模式(注意:这里设置一定要锁定配置lockForConfiguration,否则报错)
// 点击屏幕,出现聚焦视图
- (void)touchesBegan:(NSSetUITouch * *)touches withEvent:(UIEvent *)event
{
// 获取点击位置
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self.view];
// 把当前位置转换为摄像头点上的位置
CGPoint cameraPoint = [_previedLayer captureDevicePointOfInterestForPoint:point];
// 设置聚焦点光标位置
[self setFocusCursorWithPoint:point];
// 设置聚焦
[self focusWithMode:AVCaptureFocusModeAutoFocus exposureMode:AVCaptureExposureModeAutoExpose atPoint:cameraPoint];
}
/**
* 设置聚焦光标位置
*
* @param point 光标位置
*/
-(void)setFocusCursorWithPoint:(CGPoint)point{
self.focusCursorImageView.center=point;
self.focusCursorImageView.transform=CGAffineTransformMakeScale(1.5, 1.5);
self.focusCursorImageView.alpha=1.0;
[UIView animateWithDuration:1.0 animations:^{
self.focusCursorImageView.transform=CGAffineTransformIdentity;
} completion:^(BOOL finished) {
self.focusCursorImageView.alpha=0;
}];
}
/**
* 设置聚焦
*/
-(void)focusWithMode:(AVCaptureFocusMode)focusMode exposureMode:(AVCaptureExposureMode)exposureMode atPoint:(CGPoint)point{
AVCaptureDevice *captureDevice = _currentVideoDeviceInput.device;
// 锁定配置
[captureDevice lockForConfiguration:nil];
// 设置聚焦
if ([captureDevice isFocusModeSupported:AVCaptureFocusModeAutoFocus]) {
[captureDevice setFocusMode:AVCaptureFocusModeAutoFocus];
}
if ([captureDevice isFocusPointOfInterestSupported]) {
[captureDevice setFocusPointOfInterest:point];
}
// 设置曝光
if ([captureDevice isExposureModeSupported:AVCaptureExposureModeAutoExpose]) {
[captureDevice setExposureMode:AVCaptureExposureModeAutoExpose];
}
if ([captureDevice isExposurePointOfInterestSupported]) {
[captureDevice setExposurePointOfInterest:point];
}
// 解锁配置
[captureDevice unlockForConfiguration];
}