1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/chenzm_186-NIMVideo

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

NIMVideo

1. Создание нового проекта, затем pod импорт облачного сервиса NIMSDK:

  1. Перейдите в папку с проектом.
  2. Создайте файл Podfile.
  3. Откройте файл Podfile.
  4. Добавьте код для импорта необходимой библиотеки:
platform :ios, '8.0'
target 'xxx' do
    pod 'NIMSDK', '5.5.0',:inhibit_warnings => true
end
  1. Выполните команду pod install для загрузки библиотеки на локальный компьютер.

Примечание: параметр inhibit_warnings позволяет эффективно подавлять предупреждения, возникающие при использовании сторонних библиотек, но иногда может вызывать неожиданные ошибки. Будьте осторожны при его использовании.

2. Импорт файлов из облачного сервиса WeChat NIM:

  1. Найдите сервис WeChat NIM в интернете. Важно не путать его с WeChat, хотя это одна компания, но сайты разные. Я не смог найти демо-версию на этом сайте, искал долго и безуспешно, это был печальный опыт.

  2. После того как вы нашли место для скачивания, перейдите вниз и выберите источник кода для iOS:

  3. Откройте исходный проект и импортируйте соответствующие файлы в свой проект:

3. Настройка файла Info.plist:

Поскольку SDK использует микрофон, необходимо добавить следующее в файл Info.plist:

Privacy - Microphone Usage Description

4. Начало кодирования:

  1. В классе AppDelegate.m зарегистрируйте NIMSDK:
#import <NIMSDK/NIMSDK.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [AppDelegate configNIM];
    return YES;
}

///云信配置
+(void)configNIM{
    //推荐在程序启动的时候初始化 NIMSDK
    NSString *appKey        = @"xxx";
    NIMSDKOption *option    = [NIMSDKOption optionWithAppKey:appKey];
    option.apnsCername      = @"nil";
    option.pkCername        = @"nil";
    [[NIMSDK sharedSDK] registerWithOption:option];
}
  1. Перед входом в видеокомнату сначала войдите в аккаунт NIM, затем присоединитесь к комнате чата и только потом переходите в комнату видеочата:
///跳转页面
-(void)jumpToVideoVC{
    VideoVC *vc = [VideoVC new];
    [self presentViewController:vc animated:YES completion:^{}];
}


///云信登录请求
- (void)getNimLoginWithShowHud:(BOOL)isShowHudErr response:(void(^)(NSError *error))response{
    //云信登录
    NSString *user_accid =  @"xxx";
    NSString *user_nimToken = @"xxx";

    [[[NIMSDK sharedSDK] loginManager] login:user_accid token:user_nimToken completion:^(NSError *error) {
        !response?:response(error);
        if (error == nil){
            NSString *userID = [NIMSDK sharedSDK].loginManager.currentAccount;
            if (userID) {

                NSString *nick = @"昵称";
                NSString *headerUrl = @"https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLGrrnBlrnGDwlX6LOIhDv1UMicXKJ9jAv9TVicbVRmI6es3SkXU7bQrxziawS1LoR7CM54BNbrNTphg/132";
                NSDictionary *dic = @{@(NIMUserInfoUpdateTagNick):nick,@(NIMUserInfoUpdateTagAvatar):headerUrl};
                //更新昵称头像信息
                [[NIMSDK sharedSDK].userManager updateMyUserInfo:dic completion:^(NSError *error) {
                    !response?:response(error);
                }];
                NSLog(@"云信登录成功");
            }
        }else{
            if (isShowHudErr == YES) {
                NSString *err = [NSString stringWithFormat:@"登录失败:%ld",(long)error.code];
                NSLog(@"%@",err);
            }
        }
    }];
}

/**
 进入聊天室
 @param roomId 聊天室id
 @param completion 返回结果
 */
-(void)zm_enterChatroomWithRoomId:(NSString *_Nullable)roomId response:(nullable NIMChatroomEnterHandler)completion{

    NIMUser *user = [[NIMSDK sharedSDK].userManager userInfo:[NIMSDK sharedSDK].loginManager.currentAccount];
    NIMChatroomEnterRequest *request = [[NIMChatroomEnterRequest alloc] init];
    request.roomId = roomId;
    request.roomNickname = user.userInfo.nickName;
    request.roomAvatar = user.userInfo.avatarUrl;

    [[[NIMSDK sharedSDK] chatroomManager] enterChatroom:request completion:^(NSError * _Nullable error, NIMChatroom * _Nullable chatroom, NIMChatroomMember * _Nullable me) {
``` **Текст на русском языке:**

!completion?:completion(error,chatroom,me); if (error == nil){

}else{
    NSLog(@"进入失败 enter room %@ failed %@ code:%zd",chatroom.roomId,error,error.code);
}

}];

}


3、После входа в чат необходимо выполнить настройку видео, присоединиться к видеоконференции, вызвать окно видео и присоединиться к комнате видео:

```oc
//thirds
#import <NIMSDK/NIMSDK.h>
#import <NIMAVChat/NIMAVChat.h>
#import "NTESGLView.h"

//设备宽高
#define kIphone_W [UIScreen mainScreen].bounds.size.width
#define kIphone_H [UIScreen mainScreen].bounds.size.height
@interface VideoVC ()<NIMNetCallManagerDelegate>

///Видеоконфигурация
@property(nonatomic,copy)NIMNetCallVideoCaptureParam *param;
///Видеоконференция
@property(nonatomic,copy)NIMNetCallMeeting *meeting;
///Окно видео
@property(nonatomic,strong)NTESGLView *remoteGLView;


///Текущее имя камеры
@property (nonatomic, strong) NSString * currentCamare;
///
@property(nonatomic,copy)NSString *nimRoomName;

///Кнопка
@property(nonatomic,strong)UIButton *btn;

@end
#pragma mark - initial
- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self setBaseData];
    [self setBaseUI];
}

-(void)setBaseData{
    self.nimRoomName = @"vchat_room_18";
    self.currentCamare = @"vchat_room_18_user1";
    
    //Присоединиться к комнате видео
    [self joinNetCall:self with:self.nimRoomName];
}

-(void)setBaseUI{
    self.view.backgroundColor = [UIColor purpleColor];
    [self remoteGLView];
    [self btn];
}
#pragma mark - NIMNetCallManager 云信管理
///Присоединиться к комнате
- (void)joinNetCall:(UIViewController<NIMNetCallManagerDelegate>)delegate with:(NSString *)roomName{
    self.meeting.name = roomName;
    [self joinNetCallWithRMeeting:self.meeting delegate:delegate];
}

//Присоединиться
- (void)joinNetCallWithRMeeting:(NIMNetCallMeeting *)rMeeting delegate:(UIViewController<NIMNetCallManagerDelegate>)vc{
    NSLog(@"????===Подготовка к присоединению к конференции");
    [[NIMAVChatSDK sharedSDK].netCallManager setMeetingRole:NO];//Режим зрителя
    [[NIMAVChatSDK sharedSDK].netCallManager selectVideoAdaptiveStrategy:NIMAVChatVideoAdaptiveStrategySmooth];
    [[NIMAVChatSDK sharedSDK].netCallManager addDelegate:vc];
    
    [[NIMAVChatSDK sharedSDK].netCallManager joinMeeting:rMeeting completion:^(NIMNetCallMeeting * _Nonnull meeting, NSError * _Nullable error) {
        if (!error) {
            NSLog(@"=========Присоединение к конференции успешно");
        }else{
            NSLog(@"%@",error.domain);
        }
    }];
}

//Покинуть комнату
- (void)leaveRoom:(NSString *)roomName delegate:(UIViewController<NIMNetCallManagerDelegate>)delegate{
    self.meeting.name = roomName;
    [[NIMAVChatSDK sharedSDK].netCallManager leaveMeeting:self.meeting];
    [[NIMAVChatSDK sharedSDK].netCallManager removeDelegate:delegate];
    [_remoteGLView removeFromSuperview];
    _remoteGLView = nil;
    self.meeting = nil;
    self.param = nil;
}
#pragma mark - NIMNetCallManagerDelegate
//Удалённые данные YUV для видео готовы
//480*640
- (void)onRemoteYUVReady:(NSData *)yuvData width:(NSUInteger)width height:(NSUInteger)height from:(NSString *)user {
    if ([user isEqualToString:self.currentCamare]) {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            [_remoteGLView render:yuvData width:width height:height];
            NSLog(@"\n?????\n%ld\n%@",yuvData.length,yuvData);
        });
    }
}
///Пользователь присоединился к многопользовательской конференции
- (void)onUserJoined:(NSString *)uid meeting:(NIMNetCallMeeting *)meeting{
    
}
//Громкость обратного вызова
-(void)onMyVolumeUpdate:(UInt16)volume{
    //Обновить громкость пользовательского интерфейса
    NSLog(@"%d",volume);
}


///Серверная запись информации обратного вызова
- (void)onNetCallRecordingInfo:(NIMNetCallRecordingInfo *)info{
    
}
///Текущая сетевая статусная информация для разговора
- (void)onNetStatus:(NIMNetCallNetStatus)status
               user:(NSString *)user{
    NSLog(@"Сетевое состояние:%ld and Пользователь :%@",(long)status,user);
    if ([user isEqualToString:self.currentCamare]) {
//        [self changeSignal:status];
    }
}
#pragma mark - method
- (UIViewContentMode)videochatRemoteVideoContentMode
{
    NSInteger setting = [[[NSUserDefaults standardUserDefaults] objectForKey:@"videochat_remote_video_content_mode"] integerValue];
    return (setting == 0) ? UIViewContentModeScaleAspectFill : UIViewContentModeScaleAspectFit;
}

-(void)btnAction:(UIButton *)sender{
    __weak
``` **typeof(self) weakSelf = self;**

[self dismissViewControllerAnimated:YES completion:^{
    [weakSelf leaveRoom:weakSelf.nimRoomName delegate:weakSelf];
}];

**// #pragma mark - lazyload**

-(UIButton *)btn{
    if (!_btn) {
        _btn = [UIButton buttonWithType:UIButtonTypeCustom];
        _btn.frame = CGRectMake(100, 20, 100, 50);
        _btn.backgroundColor = [UIColor redColor];
        [_btn setTitle:@"点击返回" forState:UIControlStateNormal];
        [_btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:_btn];
    }
    return _btn;
}

/// **Видео конфигурация**
- (void)fillVideoCaptureSetting:(NIMNetCallVideoCaptureParam *)param{
    param.preferredVideoQuality = NIMNetCallVideoQuality480pLevel;
    param.videoCrop  = NIMNetCallVideoCrop4x3;
    param.videoFrameRate = NIMNetCallVideoFrameRate20FPS;
    param.videoHandler = ^(CMSampleBufferRef  _Nonnull sampleBuffer) {
        NSLog(@"%@",sampleBuffer);
    };
}

- (NIMNetCallVideoCaptureParam *)param{
    if (!_param) {
        _param = [[NIMNetCallVideoCaptureParam alloc]init];
        [self fillVideoCaptureSetting:_param];
    }
    return _param;
}

- (NIMNetCallMeeting *)meeting{
    if (!_meeting) {
        _meeting = [[NIMNetCallMeeting alloc] init];
        _meeting.type = NIMNetCallMediaTypeVideo;
        _meeting.actor = NO;
        _meeting.option.voiceDetect = NO;
        _meeting.option.videoCaptureParam = self.param;
        _meeting.option.pureVideo = YES;
    }
    return _meeting;
}

-(NTESGLView *)remoteGLView{
    if (!_remoteGLView) {
        _remoteGLView = [[NTESGLView alloc] initWithFrame:CGRectMake(0, 100, kIphone_W, kIphone_W*0.75)];
        _remoteGLView.backgroundColor = [UIColor greenColor];
        [_remoteGLView setContentMode:[self videochatRemoteVideoContentMode]];
        [_remoteGLView setBackgroundColor:[UIColor clearColor]];
        [self.view addSubview:_remoteGLView];
    }
    return _remoteGLView;
}

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

NIM: самое быстрое подключение видеосигнала к облачному мессенджеру. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/chenzm_186-NIMVideo.git
git@api.gitlife.ru:oschina-mirror/chenzm_186-NIMVideo.git
oschina-mirror
chenzm_186-NIMVideo
chenzm_186-NIMVideo
master