ios - 当参与者快速加入时,不会调用 ooVooAVChatDelegate

标签 ios swift oovoo

我正在努力在我的示例应用程序中实现 oovoo sdk。视频传输工作正常,但 ooVooAVChatdelegate 的委托(delegate)方法未被调用。我不确定是什么问题。感谢任何帮助。

请找到下面的代码片段。谢谢!!!!

 import UIKit
class ViewController: UIViewController,ooVooAVChatDelegate,ooVooVideoControllerDelegate,ooVooAudioControllerDelegate {

var oovoo:ooVooClient!
var avchat:ooVooAVChat!
var oovoopanel:ooVooVideoPanel!
var videorender:ooVooVideoRender!

@IBOutlet weak var VideoView: UIView!
@IBAction func Join(sender: UIButton) {
}
@IBOutlet weak var UserName: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
    oovoo = ooVooClient.sharedInstance()
    authorize()


    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func authorize()
{
    oovoo.authorizeClient("App Token Here", completion: { (result:SdkResult!) -> Void  in


        let err :sdk_error!=result.Result;
        if (err==sdk_error.OK)
        {
            NSLog("authorization ok");
            self.login()
        }
        else
        {
            NSLog("fail  autorization");     
        }


        });
     }
     func login()
    {
    self.oovoo.Account.login("sample", completion: { (result:SdkResult!) -> Void in
        if result.Result != sdk_error.OK
        {

            NSLog("login ok");
            self.actJoin()

        }
        else
        {
            NSLog("login failed");

        }

    })

}
// oovooAVChat Delegate

func actJoin(){


    oovoo = ooVooClient.sharedInstance()
    oovoopanel = ooVooVideoPanel.init(frame: self.view.frame)
    self.view.addSubview(oovoopanel)
      self.oovoo.AVChat!.delegate=self;
    self.oovoo.AVChat.VideoController.delegate = self;

    self.oovoo.AVChat.VideoController.bindVideoRender(nil, render: oovoopanel);
    self.oovoo.AVChat.VideoController.openCamera();
     self.oovoo.AVChat.VideoController.startTransmitVideo()

    self.oovoo.AVChat.join("1234", user_data: "bhavin");
}



func didParticipantJoin(participant: ooVooParticipant!, user_data: String!) {

    print(participant.participantID)
    self.oovoo.AVChat.VideoController.bindVideoRender(participant.participantID, render: oovoopanel)
    self.oovoo.AVChat.VideoController.registerRemoteVideo(participant.participantID)
}

func didParticipantLeave(participant: ooVooParticipant!) {

}

func didConferenceStateChange(state: ooVooAVChatState, error code: sdk_error) {
    if state == .Joined && code == sdk_error.OK
    {
        self.oovoo.AVChat.VideoController.openCamera()
    }
    self.oovoo.AVChat.AudioController.initAudio({ (result:SdkResult!) -> Void in
        if result.Result == sdk_error.OK{
            self.oovoo.AVChat.AudioController.setPlaybackMute(false)
        }
    })
    print("conference state changed")
}

func didReceiveData(uid: String!, data: NSData!) {

}

func didConferenceError(code: sdk_error) {
    print("conference error")

}

func didNetworkReliabilityChange(score: NSNumber!) {

}

func didSecurityState(is_secure: Bool) {

}

// ooVooVideoControllerDelegate

func didRemoteVideoStateChange(uid: String!, state: ooVooAVChatRemoteVideoState, width: Int32, height: Int32, error code: sdk_error) {

}

func didCameraStateChange(state: ooVooDeviceState, devId: String!, width: Int32, height: Int32, fps: Int32, error code: sdk_error) {
    self.oovoo.AVChat.VideoController.openPreview()
    self.oovoo.AVChat.VideoController.startTransmitVideo()
}

func didVideoTransmitStateChange(state: Bool, devId: String!, error code: sdk_error) {

    self.navigationItem.rightBarButtonItem?.title = state ? "Leave" : "Join";

}

func didVideoPreviewStateChange(state: Bool, devId: String!, error code: sdk_error) {
    print("VideoPreviewStateChange")
}

func didAudioTransmitStateChange(state: Bool, error code: sdk_error) {

}
func didAudioReceiveStateChange(state: Bool, error code: sdk_error) {

}
func didAudioHold() {

}
func didAudioUnHold() {

}

}

每当参与者加入时,它都应该调用 didParticipantJoin,但它不会调用 ooVooAVChatDelegate 的任何方法。

请帮忙!!!

最佳答案

您是否在 Objective-C 库和 Swift 之间创建了桥接 header (如此处所示)? https://github.com/eranmalovany/Documentation-1/blob/master/iOS%20Documentation/Swift%20Integration%20Guide.md

** 编辑 ** 这是我使用的代码,能够触发 didParticipantJoin 委托(delegate)。运行它时,请确保添加您的应用程序 token 并验证授权和登录步骤是否成功。然后我运行了 ooVoo sdk 中包含的示例应用程序。当示例应用程序运行时,设置用户 ID 和显示名称,然后登录。从那里,单击“房间”,输入“123456”作为 session ID,然后单击加入。稍等片刻,didParticipantJoin 委托(delegate)应该会在您的应用中触发。

import UIKit

class ViewController: UIViewController, ooVooAVChatDelegate, ooVooVideoControllerDelegate, ooVooAudioControllerDelegate {

  var oovoo:ooVooClient!
  var oovoopanel:ooVooVideoPanel!
  var videorender:ooVooVideoRender!

  @IBOutlet weak var VideoView: UIView!
  @IBAction func Join(sender: UIButton) {
  }
  @IBOutlet weak var UserName: UITextField!

  override func viewDidLoad() {
    super.viewDidLoad()
    self.oovoo = ooVooClient.sharedInstance()
    authorize()
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
  }

  func authorize()
  {
    oovoo.authorizeClient("Your App Token", completion: { (result:SdkResult!) -> Void  in


      let err :sdk_error!=result.Result;
      if (err==sdk_error.OK)
      {
        NSLog("authorization ok");
        self.login()
      }
      else
      {
        NSLog("fail  autorization");
      }

    });
  }

  func login()
  {
      self.oovoo.Account.login("UserName", completion: { (result:SdkResult!) -> Void in
      if result.Result == sdk_error.OK
      {

        NSLog("login ok");
        self.actJoin()

      }
      else
      {
        NSLog("login failed");

      }

    })

  }

  func actJoin() {
    oovoo = ooVooClient.sharedInstance()
    oovoopanel = ooVooVideoPanel.init(frame: self.view.frame)
    self.view.addSubview(oovoopanel)
    self.oovoo.AVChat!.delegate=self;
    self.oovoo.AVChat.VideoController.delegate = self;
    self.oovoo.AVChat.VideoController.openCamera();
    self.oovoo.AVChat.VideoController.startTransmitVideo()

    self.oovoo.AVChat.join("123456", user_data: "UserId");
}

  /**
   *  listener method is being called when audio unhold.
   */
  func didAudioUnHold() {

  }

  /**
   *  listener method is being called when audio hold.
   */
  func didAudioHold() {

  }

  /**
   *  listener method is being called when audio receive state was changed.
   *  @param state - new audio receive state (ON/OFF).
   *  @param errorCode - conference error code.
   */
  func didAudioReceiveStateChange(state: Bool, error code: sdk_error) {

  }

  /**
   *  listener method is being called when audio transmit state was changed.
   *  @param state - new audio transmit state (ON/OFF).
   *  @param errorCode - conference error code.
   */
  func didAudioTransmitStateChange(state: Bool, error code: sdk_error) {

  }

  /**
   *  listener method is being called when preview video state was changed.
   *  @param state - new preview video state (ON/OFF).
   *  @param errorCode - conference error code.
   */
  func didVideoPreviewStateChange(state: Bool, devId: String!, error code: sdk_error) {

  }

  /**
   *  listener method is being called when video transmit state was changed.
   *  @param state - new video transmit state (ON/OFF).
   *  @param errorCode - conference error code.
   */
  func didVideoTransmitStateChange(state: Bool, devId: String!, error code: sdk_error) {

  }

  /**
   *  listener method is being called when camera state was changed.
   *  @param state - new camera state .
   *  @param errorCode - conference error code.
   */
  func didCameraStateChange(state: ooVooDeviceState, devId: String!, width: Int32, height: Int32, fps: Int32, error code: sdk_error) {
    self.oovoo.AVChat.VideoController.openPreview()
    self.oovoo.AVChat.VideoController.startTransmitVideo()
  }

  /**
   *  listener method is being called when remote video state has changed.
   *  @param uid -user id of remote video.
   *  @param state - new remote video state.
   *  @param width - picture width.
   *  @param height - picture height.
   *  @param errorCode - conference error code.
   */
  func didRemoteVideoStateChange(uid: String!, state: ooVooAVChatRemoteVideoState, width: Int32, height: Int32, error code: sdk_error) {

  }

  /**
   *  listener method which indicates if user is in secure mode.
   *  @param score - true for secured otherwise false.
   */
  func didSecurityState(is_secure: Bool) {

  }

  /**
   *  listener method is being called when network reilability change.
   *  @param score - a number from 1 - 4  1 indicate that network is worse 4 network is best.
   */
  func didNetworkReliabilityChange(score: NSNumber!) {

  }

  /**
   *  listener method is being called when conference error is received.
   *  @param errorCode - conference error code.
   */
  func didConferenceError(code: sdk_error) {

  }

  /**
   *  listener method is being called when message is received.
   *  @param uid -user id of remote video.
   *  @param buffer - data which contains the message.
   *  @param size - buffer size.
   */
  internal func didReceiveData(uid: String!, data: NSData!) {

  }

  /**
   *  listener method is being called when conference state has changed.
   *  @param state - new conference state.
   *  @param errorCode - conference error code.
   */
  func didConferenceStateChange(state: ooVooAVChatState, error code: sdk_error) {
    if state == .Joined && code == sdk_error.OK
    {
      self.oovoo.AVChat.VideoController.openCamera()
    }
    self.oovoo.AVChat.AudioController.initAudio({ (result:SdkResult!) -> Void in
      if result.Result == sdk_error.OK{
        self.oovoo.AVChat.AudioController.setPlaybackMute(false)
      }
    })
    print("conference state changed")
  }

  /**
   *  listener method is being called when new participant left conference.
   *  @param uid - user id of participant.
   */
  func didParticipantLeave(participant: ooVooParticipant!) {

  }

  /**
   *  listener method is being called when new participant joined conference.
   *  @param uid - user id of new participant.
   *  @param userData - user data.
   */
  func didParticipantJoin(participant: ooVooParticipant!, user_data: String!) {
    NSLog("Participant Joined!");
  }
}

关于ios - 当参与者快速加入时,不会调用 ooVooAVChatDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39808991/

相关文章:

ios - 在 UITableView 上执行具有多个状态的 segue 的问题

ios - 如何在 Swift 中的注释 View 上显示不同的图标?

ios - swift 项目中的 ooVoo SDK 编译错误

iphone - 什么会导致 iPhone 主屏幕在模态翻转转换后可见?

ios - UITableView 的错误值 :rowHeight at iOS8

iphone - 如何在 UITableView 中定位无标题部分

iphone - 链接器命令失败 iOS

ios - xcode 8 UIStackView。如何制作圆形按钮?

swift - 在 Swift AppDelegate 之外不可见的 Objective-C 框架类