- 4g网络通信需要
RTCConfiguration *config = [[RTCConfiguration alloc]init];
config.iceServers = @[[[RTCIceServer alloc] initWithURLStrings:defaultIceServers],[[RTCIceServer alloc] initWithURLStrings:@[@"turn:numb.viagenie.ca"] username:@"webrtc@live.com" credential:@"muazkh"]];
- 视频质量处理
-(void)startCaptureLocalVideoPosition:(AVCaptureDevicePosition)position{
[self.localVideoTrack removeRenderer:self.localRenderer];
RTCCameraVideoCapturer *capturer = (RTCCameraVideoCapturer *)self.videoCapturer;
capturer.captureSession.sessionPreset = AVCaptureSessionPresetHigh;
AVCaptureDevice * camera;
for (AVCaptureDevice * device in RTCCameraVideoCapturer.captureDevices) {
if (device.position == position) {
camera = device;
}
}
NSArray<AVCaptureDeviceFormat *> * formats = [RTCCameraVideoCapturer supportedFormatsForDevice:camera];
AVCaptureDeviceFormat * format = [[formats sortedArrayUsingComparator:^NSComparisonResult(AVCaptureDeviceFormat * obj1, AVCaptureDeviceFormat* obj2) {
float width1 = CMVideoFormatDescriptionGetDimensions(obj1.formatDescription).width;
float width2 = CMVideoFormatDescriptionGetDimensions(obj2.formatDescription).width;
return width1 < width2;
}] firstObject];
for (AVCaptureDeviceFormat * obj1 in formats) {
float width1 = CMVideoFormatDescriptionGetDimensions(obj1.formatDescription).width;
NSLog(@"width1====%f",width1);
}
AVFrameRateRange *fps = [[format.videoSupportedFrameRateRanges sortedArrayUsingComparator:^NSComparisonResult(AVFrameRateRange * obj1, AVFrameRateRange* obj2) {
return obj1.maxFrameRate < obj2.maxFrameRate;
}] firstObject];
__weak typeof(self) weakSelf = self;
[capturer startCaptureWithDevice:camera format:format fps:fps.maxFrameRate completionHandler:^(NSError * _Nonnull e) {
AVCaptureSession* session = capturer.captureSession;
for (AVCaptureVideoDataOutput* output in session.outputs) {
NSLog(@"%@", output.connections);
for (AVCaptureConnection * av in output.connections) {
//判断是否是前置摄像头状态
if (position == AVCaptureDevicePositionFront) {
av.videoMirrored = YES;
av.videoOrientation = AVCaptureVideoOrientationLandscapeRight;
NSLog(@"%@镜像",av.supportsVideoMirroring?@"支持":@"不支持");
}else{
//镜像设置
av.videoMirrored = NO;
av.videoOrientation = AVCaptureVideoOrientationLandscapeRight;
NSLog(@"%@镜像",av.supportsVideoMirroring?@"支持":@"不支持");
}
}
}
if (weakSelf.delegate) {
[weakSelf.localVideoTrack addRenderer:weakSelf.localVideo];
}
[weakSelf.delegate webRTCManager:weakSelf AddLocalPeerId:weakSelf.username localVideo:weakSelf.localVideo];
}];
}
3.声音设置
// 静音设置
-(void)setAllAudioEnabled:(BOOL)isEnabled {
for (RTCPeerConnection *peerConnection in [self.peers allValues]) {
for (RTCRtpTransceiver * transceiver in peerConnection.transceivers) {
if ([transceiver.sender.track isKindOfClass:[RTCAudioTrack class]] ) {
RTCAudioTrack *track = (RTCAudioTrack *)transceiver.sender.track;
track.isEnabled = isEnabled;
}
}
}
}
-(void)setAudioEnabled:(BOOL)isEnabled peerId:(NSString *) peerId{
RTCPeerConnection *peerConnection = [self.peers objectForKey:peerId];
for (RTCRtpTransceiver * transceiver in peerConnection.transceivers) {
if ([transceiver.sender.track isKindOfClass:[RTCAudioTrack class]] ) {
RTCAudioTrack *track = (RTCAudioTrack *)transceiver.sender.track;
track.isEnabled = isEnabled;
}
}
}
//听筒模式
-(void)setAudioSession {
AVAudioSession *audioSession=[AVAudioSession sharedInstance];
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil];
[audioSession setActive:YES error:nil];
}
//扬声器模式
-(void)setAudioWaiFangSession {
AVAudioSession *audioSession=[AVAudioSession sharedInstance];
//设置为公放模式
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
[audioSession setActive:YES error:nil];
}
- 响铃处理,iOS没有呼叫功能,变相硬推送来实现
//铃声拷贝 app启动时要确保铃声靠边完成
-(void)initBadge{
// NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.jzb.share"];
// NSURL *fileURL = [groupURL URLByAppendingPathComponent:@"push_badge.txt"];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *containerUrl = [fileManager containerURLForSecurityApplicationGroupIdentifier:@"group.com.jzb.share"];
NSString *localPath = [containerUrl.path stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@.%@", @"push_badge", @"txt"]];
// NSURL *localURL = [NSURL fileURLWithPath:localPath];
NSLog(@"%@",localPath);
if (![fileManager fileExistsAtPath:localPath]) {
[fileManager createDirectoryAtPath:localPath withIntermediateDirectories:NO attributes:nil error:nil];
}
// NSString *filePath = [[NSBundle mainBundle] pathForResource:@"push_badge" ofType:@"txt"];
//
// [fileManager moveItemAtURL:[NSURL fileURLWithPath:filePath] toURL:localURL error:nil];
}
-(void)ringing{
//1.获得音效文件的全路径
NSURL *url=[[NSBundle mainBundle] URLForResource:@"voip_call.mp3" withExtension:nil];
//2.加载音效文件,创建音效ID(SoundID,一个ID对应一个音效文件)
_soundID = 12345;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &_soundID);
// 完成播放之后执行的soundCompleteCallback函数
// AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, soundCompleteCallback, NULL);
//3.播放音效文件
//下面的两个函数都可以用来播放音效文件,第一个函数伴随有震动效果
AudioServicesPlayAlertSound(_soundID);
}