Потоковое аудио J2ME через SIP-соединение - PullRequest
4 голосов
/ 24 декабря 2011

Я создаю потоковый аудиоплеер J2ME в реальном времени с RTP и через SIP соединение. Также я новичок в этих вещах. Я хочу глубоко взглянуть на эти вещи. Если кто-то знает хороший рабочий пример кода, демонстрирующий потоковый аудиоплеер с RTP (это означает, как отправить сообщение REGISTER на сервер через SIP, чтобы зарегистрироваться, отправить сообщение INVITE и получить ответ и игра). Пожалуйста, дайте мне знать, высоко ценится.

Также я посмотрел здесь

если

Мой порт сервера 6060
ip 111.111.111.1
id - это myid пароль 123

Правильно ли я использовал код? Если я не прав, пожалуйста, исправьте меня.

public void doRegister(String username, String password, String realm) {

  SipClientConnection scc = null;  
  SipConnectionNotifier scn = null;  
  String contact = null;    
  try {   
      scn = (SipConnectionNotifier) Connector.open("sip:5080");   
      contact = new String("sip:myid:123@"+scn.getLocalAddress()+":"+scn.getLocalPort());   
      scc = (SipClientConnection) Connector.open("sip:111.111.111.1+"transport=tcp")  ; 
      scc.initRequest("REGISTER", scn);  
      scc.setHeader("From", "sip:myid:123@"+scn.getLocalAddress()+":5080");  
      scc.setHeader("To", "sip:myid:123@111.111.111.1");  
      scc.setHeader("Contact", contact);  
      scc.send();  
      boolean handled = false;  
      int scode = 0;        
      while(!handled) {
          SipHeader sh; 
          scc.receive(30000);
          scode = scc.getStatusCode();
          switch(scode){  
              case 401:
                  sh = new SipHeader("WWW-Authenticate",
                     scc.getHeader("WWW-Authenticate"));
                  realm = sh.getParameter("realm");                
                  scc.setCredentials(username, password, realm);
                  break;

              case 407:
                  sh = new SipHeader("Proxy-Authenticate", 
                  scc.getHeader("Proxy-Authenticate"));
                  realm = sh.getParameter("realm");                
                  scc.setCredentials(username, password, realm);
                  break;

              case 200: 
                  handled = true;
                  break;
              default:  
                handled = true;
          }  
      }
      scc.close();
  } catch(Exception ex) {
      // handle Exceptions
  }
 }

Я получил ответ с 180 Rigging сообщением. Также дайте мне знать, что такое realm здесь. scc.setCredentials(username, password, realm);

Ответы [ 2 ]

2 голосов
/ 28 декабря 2011

Как вы видите здесь в примере 1 - вы понимаете, что когда вы делаете новый запрос на сервер, где сервер ожидает аутентификацию, он сначала отправляет 401. Увидев это, клиент может затем выполнить поиск пароль или спросить пользователя. Когда сервер отправляет код ответа 401, он указывает, какой домен безопасности применим для данных запросов. Это уже то, что вы получили в своем коде:

realm = sh.getParameter("realm"); 

После сбоя необходимо send() запрос снова с учетными данными здесь. Я предполагаю, что функция setCredentials() устанавливает эти параметры только внутри объекта scc, и они будут применены при повторном вызове send().

Некоторые ссылки, которые могут представлять интерес: http://www.developer.nokia.com/Community/Discussion/showthread.php?126760-SIP-registration-401-Unauthorized-.. (здесь у людей были проблемы, связанные с номером порта, но я не уверен, что это вас беспокоит)

0 голосов
/ 01 января 2012

Доступны многие функции и многое другое, а широкий ответ можно найти здесь Также в API JSR180 Nokia также есть примеры кодов

...