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

Max

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

pride

Member
Спасибо. Воспроизводится. Как только будут новости по этой проблеме, отпишу.
По другим вопросам лучше создать отдельную тему.
Спасибо, ждем. И если будет возможность сделать передачу кастом полей при ns.play('Name', {custom: {token : '8fg876grrjkbnbe'}}) и ns.publish('Name', {custom: {token : '8fg876grrjkbnbe'}}); Будем очень признательны.
 

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
 

pride

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
Благодарю, оперативно , порадовали )
 

pride

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

Max

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

pride

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

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
 

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
}
А следовательно соединение установлено.
 
Last edited:

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
 

pride

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
Быть может этот лог попал когда я перезагружал NodeJS
 

Max

Administrator
Staff member
Так а как это может быть ? Если на REST соединение висит
Это говорит о том, что коннет был установлен, например некоторое время назад.
Или о том, что вызов /connection/find_all выдает соединение, которого нет.
Быть может этот лог попал когда я перезагружал NodeJS
Может быть. Но тогда нам нужны логи, не попадающие под перезагрузку. Потому что в этих явно видно проблемы с коннектом.
 

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"
}
 

Max

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