Flash как альтернатива WebRTC

Discussion in 'Web Call Server 5' started by pride, Apr 13, 2017.

  1. Max

    Max Administrator Staff Member

    Спасибо. Воспроизводится. Как только будут новости по этой проблеме, отпишу.
    По другим вопросам лучше создать отдельную тему.
  2. pride

    pride Member

    Спасибо, ждем. И если будет возможность сделать передачу кастом полей при ns.play('Name', {custom: {token : '8fg876grrjkbnbe'}}) и ns.publish('Name', {custom: {token : '8fg876grrjkbnbe'}}); Будем очень признательны.
  3. Max

    Max Administrator Staff Member

    Добавили. Сборка сервера последняя 2181.
    Теперь при коннекте с флэша или с Web SDK, на REST API будет видно custom-объект.
    Пример:
    1. Коннект с Flash:
    Code:
    connection = new NetConnection();
    connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
    var obj:Object = new Object();
    obj.appKey = 'flashStreamingApp';
    obj.custom = new Object();
    obj.custom.token = 'ddddddddddd';
    connection.connect(UrlStr, obj);
    2. REST запрос
    Code:
    http://host:9091/rest-api/connection/find_all
    3. Результат
    Code:
    custom: {
    token: 'ddddddddddd'
    }
    Тоже самое будет, если при коннекте с Flash передать параметр в URL
    Code:
    rtmp://host:1935/live?token=ddddddddddd
    При этом, если параметры были переданы и в коде и в RTMP URL, то код будет иметь приоритет.

    По методам NetStream.play() и NetStream.publish() добавить нет возможности, т.к. это методы AS3 API и они не позволяют передавать дополнительных параметров.
    http://help.adobe.com/ru_RU/FlashPl...onscript/3/flash/net/NetStream.html#publish()
    Code:
    public function publish(name:String = null, type:String = null):void
  4. pride

    pride Member

    Благодарю, оперативно , порадовали )
  5. pride

    pride Member

    На вэб сервер не приходит ConnectionStatusEvent совсем и StreamStatusEvent (UNPUBLISHED || STOPPED) на флеш клиенте.
    В вашей демонстрации та же история.
    Last edited: May 11, 2017
  6. Max

    Max Administrator Staff Member

    Пришлите логи за этот час и конфиги на logs@flashphoner.com. Проверим.
    Code:
    WCS_HOME/logs/flashphoner_manager.log
    WCS_HOME/logs/server_logs/flashphoner.log
    WCS_HOME/conf
  7. pride

    pride Member

    Отправил. с StreamStatusEvent разобрались, ConnectionStatusEvent по прежнему не работает.
  8. Max

    Max Administrator Staff Member

    По логам, которые вы прислали, у вас метод коннект совсем не работает по Connection Refused: http://10.10.10.191:7777/connect
    Сначала нужно с ним разобраться.
    ConnectionStatusEvent - ESTABLISHED вызывается после того, как соединение установлено.
    ConnectionStatusEvent - DISCONNECTED вызывается после того, как соединение установлено и потеряно.
    Но у вас до этого, судя по логам, не доходит. Все останавливается на вызове /connect
    Code:
    11:40:38,596 ERROR agerRemoteRmiService - RMI TCP Connection(41)-127.0.0.1 Got exception in REST
    org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://10.10.10.191:7777/connect":В соединении отказано (Connection refused); nested exception is java.net.ConnectException: В соединении отказано (Connection refused)
        at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:561)
        at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:506)
        at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:334)
        at com.flashphoner.server.manager.rmi.operations.impl.ManagerRemoteRmiService.postForObject(ManagerRemoteRmiService.java:104)
        at com.flashphoner.server.manager.rmi.operations.impl.ManagerRemoteRmiService.connect(ManagerRemoteRmiService.java:71)
        at sun.reflect.GeneratedMethodAccessor129.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:324)
        at sun.rmi.transport.Transport$1.run(Transport.java:200)
        at sun.rmi.transport.Transport$1.run(Transport.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
    Caused by: java.net.ConnectException: В соединении отказано (Connection refused)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at java.net.Socket.connect(Socket.java:538)
        at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
        at sun.net.www.http.HttpClient.<init>(HttpClient.java:211)
        at sun.net.www.http.HttpClient.New(HttpClient.java:308)
        at sun.net.www.http.HttpClient.New(HttpClient.java:326)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1202)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1138)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1032)
        at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:966)
        at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:78)
        at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)
        at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:52)
        at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:545)
        ... 20 more
  9. pride

    pride Member

    Так а как это может быть ? Если на REST соединение весит :
    http://pride.mk.ua:9091/rest-api/connection/find_all
    Code:
    {
    "custom": {
    "user": "135212",
    "token": "jpj3rcivkm07q8hau9jasbf4s4"
    },
    "nodeId": null,
    "appKey": "flashStreamingApp",
    "sessionId": "d27a54cb-5137-4742-87aa-afe57db8e263",
    "sipRegisterRequired": false,
    "sipLogin": "ajojb8sm864f9l2pmmfqo79bmj",
    "sipAuthenticationName": null,
    "sipPassword": null,
    "sipVisibleName": null,
    "sipDomain": null,
    "sipOutboundProxy": null,
    "sipPort": 0,
    "sipContactParams": null,
    "width": 0,
    "height": 0,
    "supportedResolutions": "640x480",
    "useProxy": false,
    "useDTLS": false,
    "useWsTunnel": false,
    "useWsTunnelPacketization2": false,
    "useBase64BinaryEncoding": false,
    "mediaProviders": [
      "Flash"
    ],
    "appMainClass": null,
    "appCallbackClass": null,
    "authToken": null,
    "status": null,
    "restClientConfig": null,
    "clientVersion": null,
    "clientOSVersion": null,
    "clientBrowserVersion": null
    }
    А следовательно соединение установлено.
  10. pride

    pride Member

    и на connect :
    просто разбераем что пришло , добавляем RESTClientConfig и отдаем.

    Code:
    ex.post('/connect', function (req, res) {
        console.log('connect');
        req.body.restClientConfig = {
            publishStream: {
                "restExclude": "",
                "clientExclude": "",
                "restOnError": "FAIL",
                "restPolicy": "NOTIFY",
                "restOverwrite": ""
            },
            playStream: {
                "restExclude": "",
                "clientExclude": "",
                "restOnError": "FAIL",
                "restPolicy": "NOTIFY",
                "restOverwrite": ""
            }
        };
        res.json(req.body);
    });
    NodeJS + Express
  11. pride

    pride Member

    Быть может этот лог попал когда я перезагружал NodeJS
  12. Max

    Max Administrator Staff Member

    Это говорит о том, что коннет был установлен, например некоторое время назад.
    Или о том, что вызов /connection/find_all выдает соединение, которого нет.
    Может быть. Но тогда нам нужны логи, не попадающие под перезагрузку. Потому что в этих явно видно проблемы с коннектом.
  13. pride

    pride Member

    Сбросил
  14. Max

    Max Administrator Staff Member

    Воспроизвели в 2220.

    Flash клиент, который работает через
    Code:
    com.flashphoner.server.client.handler.wcs4.FlashStreamingHandler
    не отсылает ConnectionStatusEvent на REST.
    Это или баг или так и работало до этого. Поэтому событие DISCONNECTED и не приходит, как и ESTABLISHED.
    Эта проблема только с Native Flash - клиентом. Скорее всего исправим на следующей неделе.

    Сейчас можно попробовать заменить handler.
    Например:
    Code:
    show apps -d
    Показывает, что у flashStreamingApp есть handler:
    Code:
    com.flashphoner.server.client.handler.wcs4.FlashStreamingHandler
    А у flashRoomApp есть handler
    Code:
    com.flashphoner.server.client.handler.wcs4.FlashRoomHandler
    FlashRoomHandler поддерживает событие ConnectionStatusEvent, поэтому можете попробовать установить этот handler для вашего Flash приложения.
    Сделать это можно так.
    Code:
    update app -m com.flashphoner.server.client.handler.wcs4.FlashRoomHandler flashStreamingApp
    Этот handler отправляет DISCONNECTED, но не отправляет ESTABLISHED.
    Дисконнекты в этом случае нормально отрабатывают:
    Code:
    12:14:09,510 INFO  agerRemoteRmiService - RMI TCP Connection(30)-192.168.88.59 SEND REST OBJECT ==>
    URL:http://localhost:9091/EchoApp/ConnectionStatusEvent
    OBJECT:
    {
      "nodeId" : "H4gfHeULtX6ddGGUWwZxhUNyqZHUFH8j@192.168.1.59",
      "appKey" : "flashStreamingApp",
      "sessionId" : "74d8e67a-2b55-4016-bd21-0b3460191b10",
      "status" : "DISCONNECTED"
    }
    12:14:09,527 INFO  agerRemoteRmiService - RMI TCP Connection(30)-192.168.88.59 RECEIVED REST OBJECT <==
    URL:http://localhost:9091/EchoApp/ConnectionStatusEvent
    OBJECT:
    {
      "nodeId" : "H4gfHeULtX6ddGGUWwZxhUNyqZHUFH8j@192.168.1.59",
      "appKey" : "flashStreamingApp",
      "sessionId" : "74d8e67a-2b55-4016-bd21-0b3460191b10",
      "status" : "DISCONNECTED"
    }
    
  15. pride

    pride Member

    Все получилось спасибо. Ждем обновления.
  16. Max

    Max Administrator Staff Member

    Исправлено в сборке 2223.
    Теперь оба Flash хендлера высылают ConnectionStatusEvent.
    Можно обновляться до последней.
    По другим вопросам, создавайте пожалуйста новую тему.
  17. pride

    pride Member

    Благодарю!

Share This Page