Coder Social home page Coder Social logo

[技术咨询] IPC上的rtsp流转为webrtc,在webrtc还没播出来时就提示mediakit::WebRtcSession on err: 255(message too long) about zlmediakit HOT 9 CLOSED

pandalee86 avatar pandalee86 commented on July 22, 2024
[技术咨询] IPC上的rtsp流转为webrtc,在webrtc还没播出来时就提示mediakit::WebRtcSession on err: 255(message too long)

from zlmediakit.

Comments (9)

xiongguangjie avatar xiongguangjie commented on July 22, 2024

更新最新的代码看看是否解决了,我记得这个提交应该已经解决了 62641f4

from zlmediakit.

pandalee86 avatar pandalee86 commented on July 22, 2024

更新最新的代码看看是否解决了,我记得这个提交应该已经解决了 62641f4

多谢!
我先更新代码试试看。

from zlmediakit.

pandalee86 avatar pandalee86 commented on July 22, 2024

更新最新的代码看看是否解决了,我记得这个提交应该已经解决了 62641f4

我更新了这个提交后,该问题仍然存在。
主要是一个远程vpn访问系统的同事复现的,不知道跟她的网络环境有没有关系。

今天复现的log如下:
Line 130224: 2024-05-08 17:12:29.728 I [MediaServer] [8-event poller 19] WebRtcTransport.cpp:498 WebRtcTransportImp | CioAZH+9AAA=_145
Line 130225: 2024-05-08 17:12:29.731 D [MediaServer] [8-event poller 19] WebApi.cpp:296 http api debug |
Line 130396: 2024-05-08 17:12:29.731 T [MediaServer] [8-event poller 19] TcpServer.h:54 operator() | 382-166(10.42.0.139:41806) mediakit::HttpSession
Line 130397: 2024-05-08 17:12:29.731 I [MediaServer] [8-event poller 19] TcpServer.cpp:125 onAcceptConnection | ******** start sock->setOnRead sock:0x7f9a7c30ba70
Line 130398: 2024-05-08 17:12:29.732 I [MediaServer] [8-event poller 19] WebRtcTransport.cpp:498 WebRtcTransportImp | CioAZH+9AAA=_146
Line 130399: 2024-05-08 17:12:29.733 D [MediaServer] [8-event poller 19] WebApi.cpp:296 http api debug |
Line 130570: 2024-05-08 17:12:29.792 T [MediaServer] [8-event poller 19] UdpServer.h:40 operator() | 383-169(10.42.0.1:1198) mediakit::WebRtcSession
Line 130571: 2024-05-08 17:12:29.792 I [MediaServer] [8-event poller 19] WebRtcSession.cpp:85 onRecv_l | 383-169(10.42.0.1:1198)
Line 130572: 2024-05-08 17:12:29.792 D [MediaServer] [8-event poller 19] IceServer.cpp:340 HandleTuple | transition from state 'new' to 'connected'
Line 130573: 2024-05-08 17:12:29.792 I [MediaServer] [8-event poller 19] WebRtcTransport.cpp:164 OnIceServerSelectedTuple | CioAZH+9AAA=_145 select tuple udp 10.42.0.1:1198
Line 130574: 2024-05-08 17:12:29.792 I [MediaServer] [8-event poller 19] WebRtcTransport.cpp:170 OnIceServerConnected | CioAZH+9AAA=_145
Line 130575: 2024-05-08 17:12:29.796 T [MediaServer] [8-event poller 19] UdpServer.h:40 operator() | 384-171(10.42.0.1:49820) mediakit::WebRtcSession
Line 130576: 2024-05-08 17:12:29.797 I [MediaServer] [8-event poller 19] WebRtcSession.cpp:85 onRecv_l | 384-171(10.42.0.1:49820)
Line 130577: 2024-05-08 17:12:29.797 D [MediaServer] [8-event poller 19] IceServer.cpp:340 HandleTuple | transition from state 'new' to 'connected'
Line 130578: 2024-05-08 17:12:29.797 I [MediaServer] [8-event poller 19] WebRtcTransport.cpp:164 OnIceServerSelectedTuple | CioAZH+9AAA=_146 select tuple udp 10.42.0.1:49820
Line 130579: 2024-05-08 17:12:29.797 I [MediaServer] [8-event poller 19] WebRtcTransport.cpp:170 OnIceServerConnected | CioAZH+9AAA=_146
Line 130580: 2024-05-08 17:12:29.850 E [MediaServer] [8-event poller 19] DtlsTransport.cpp:744 ProcessDtlsData | cannot process data while not running
Line 130581: 2024-05-08 17:12:29.850 E [MediaServer] [8-event poller 19] DtlsTransport.cpp:744 ProcessDtlsData | cannot process data while not running
Line 130582: 2024-05-08 17:12:29.906 D [MediaServer] [8-event poller 19] IceServer.cpp:429 HandleTuple | transition from state 'connected' to 'completed'
Line 130583: 2024-05-08 17:12:29.906 I [MediaServer] [8-event poller 19] WebRtcTransport.cpp:174 OnIceServerCompleted | CioAZH+9AAA=_145
Line 130584: 2024-05-08 17:12:29.906 I [MediaServer] [8-event poller 19] WebRtcTransport.cpp:226 OnDtlsTransportConnecting | CioAZH+9AAA=_145
Line 130585: 2024-05-08 17:12:29.906 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:699 Run | running [role:server]
Line 130586: 2024-05-08 17:12:29.906 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1411 OnSslInfo | DTLS handshake start
Line 130587: 2024-05-08 17:12:29.906 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'before SSL initialization']
Line 130588: 2024-05-08 17:12:29.906 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1407 OnSslInfo | role: server, waiting:'before SSL initialization']
Line 130589: 2024-05-08 17:12:29.907 D [MediaServer] [8-event poller 19] IceServer.cpp:429 HandleTuple | transition from state 'connected' to 'completed'
Line 130590: 2024-05-08 17:12:29.907 I [MediaServer] [8-event poller 19] WebRtcTransport.cpp:174 OnIceServerCompleted | CioAZH+9AAA=_146
Line 130591: 2024-05-08 17:12:29.907 I [MediaServer] [8-event poller 19] WebRtcTransport.cpp:226 OnDtlsTransportConnecting | CioAZH+9AAA=_146
Line 130592: 2024-05-08 17:12:29.907 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:699 Run | running [role:server]
Line 130593: 2024-05-08 17:12:29.907 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1411 OnSslInfo | DTLS handshake start
Line 130594: 2024-05-08 17:12:29.907 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'before SSL initialization']
Line 130595: 2024-05-08 17:12:29.907 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1407 OnSslInfo | role: server, waiting:'before SSL initialization']
Line 130596: 2024-05-08 17:12:29.983 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'before SSL initialization']
Line 130597: 2024-05-08 17:12:29.984 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read client hello']
Line 130598: 2024-05-08 17:12:29.984 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write server hello']
Line 130599: 2024-05-08 17:12:29.984 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write certificate']
Line 130600: 2024-05-08 17:12:29.986 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write key exchange']
Line 130601: 2024-05-08 17:12:29.986 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write certificate request']
Line 130602: 2024-05-08 17:12:29.986 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write server done']
Line 130603: 2024-05-08 17:12:29.986 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1407 OnSslInfo | role: server, waiting:'SSLv3/TLS write server done']
Line 130604: 2024-05-08 17:12:29.986 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:977 SendPendingOutgoingDtlsData | 2117 bytes of DTLS data ready to sent to the peer
Line 130605: 2024-05-08 17:12:29.987 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1015 SetTimeout | DTLS timer set in 99ms
Line 130606: 2024-05-08 17:12:29.987 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'before SSL initialization']
Line 130607: 2024-05-08 17:12:29.987 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read client hello']
Line 130608: 2024-05-08 17:12:29.987 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write server hello']
Line 130609: 2024-05-08 17:12:29.987 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write certificate']
Line 130610: 2024-05-08 17:12:29.989 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write key exchange']
Line 130611: 2024-05-08 17:12:29.990 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write certificate request']
Line 130612: 2024-05-08 17:12:29.990 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write server done']
Line 130613: 2024-05-08 17:12:29.990 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1407 OnSslInfo | role: server, waiting:'SSLv3/TLS write server done']
Line 130614: 2024-05-08 17:12:29.990 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:977 SendPendingOutgoingDtlsData | 2117 bytes of DTLS data ready to sent to the peer
Line 130615: 2024-05-08 17:12:29.990 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1015 SetTimeout | DTLS timer set in 99ms
Line 130616: 2024-05-08 17:12:30.033 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write server done']
Line 130617: 2024-05-08 17:12:30.034 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read client certificate']
Line 130618: 2024-05-08 17:12:30.034 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read client key exchange']
Line 130619: 2024-05-08 17:12:30.035 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read certificate verify']
Line 130620: 2024-05-08 17:12:30.035 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read change cipher spec']
Line 130621: 2024-05-08 17:12:30.035 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read finished']
Line 130622: 2024-05-08 17:12:30.035 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write change cipher spec']
Line 130623: 2024-05-08 17:12:30.035 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write finished']
Line 130624: 2024-05-08 17:12:30.035 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1415 OnSslInfo | DTLS handshake done
Line 130625: 2024-05-08 17:12:30.035 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:977 SendPendingOutgoingDtlsData | 67 bytes of DTLS data ready to sent to the peer
Line 130626: 2024-05-08 17:12:30.035 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1166 CheckRemoteFingerprint | valid remote fingerprint
Line 130627: 2024-05-08 17:12:30.035 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1340 GetNegotiatedSrtpCryptoSuite | chosen SRTP crypto suite: SRTP_AEAD_AES_256_GCM
Line 130628: 2024-05-08 17:12:30.035 I [MediaServer] [8-event poller 19] WebRtcTransport.cpp:191 OnDtlsTransportConnected | CioAZH+9AAA=_145
Line 130629: 2024-05-08 17:12:30.045 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1015 SetTimeout | DTLS timer set in 89ms
Line 130630: 2024-05-08 17:12:30.045 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write server done']
Line 130631: 2024-05-08 17:12:30.045 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read client certificate']
Line 130632: 2024-05-08 17:12:30.045 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read client key exchange']
Line 130633: 2024-05-08 17:12:30.046 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read certificate verify']
Line 130634: 2024-05-08 17:12:30.046 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read change cipher spec']
Line 130635: 2024-05-08 17:12:30.046 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read finished']
Line 130636: 2024-05-08 17:12:30.046 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write change cipher spec']
Line 130637: 2024-05-08 17:12:30.046 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write finished']
Line 130638: 2024-05-08 17:12:30.046 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1415 OnSslInfo | DTLS handshake done
Line 130639: 2024-05-08 17:12:30.046 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:977 SendPendingOutgoingDtlsData | 67 bytes of DTLS data ready to sent to the peer
Line 130640: 2024-05-08 17:12:30.046 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1166 CheckRemoteFingerprint | valid remote fingerprint
Line 130641: 2024-05-08 17:12:30.046 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1340 GetNegotiatedSrtpCryptoSuite | chosen SRTP crypto suite: SRTP_AEAD_AES_256_GCM
Line 130642: 2024-05-08 17:12:30.046 I [MediaServer] [8-event poller 19] WebRtcTransport.cpp:191 OnDtlsTransportConnected | CioAZH+9AAA=_146
Line 130643: 2024-05-08 17:12:30.049 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1015 SetTimeout | DTLS timer set in 96ms
Line 130645: 2024-05-08 17:12:30.661 T [MediaServer] [8-event poller 19] UdpServer.cpp:302 operator() | 383-169(10.42.0.1:1198) mediakit::WebRtcSession on err: 255(message too long)
Line 130646: 2024-05-08 17:12:30.661 W [MediaServer] [8-event poller 19] WebRtcSession.cpp:104 onError | 383-169(10.42.0.1:1198) 255(message too long)
Line 130647: 2024-05-08 17:12:30.661 I [MediaServer] [8-event poller 19] WebRtcTransport.cpp:1175 removeTuple | CioAZH+9AAA=_145 remove tuple 10.42.0.1:1198
Line 130648: 2024-05-08 17:12:30.661 I [MediaServer] [8-event poller 19] WebRtcTransport.cpp:183 OnIceServerDisconnected | CioAZH+9AAA=_145
Line 130649: 2024-05-08 17:12:30.661 W [MediaServer] [8-event poller 19] WebRtcPlayer.cpp:98 onDestory | RTC播放器(defaultVhost/live/v6c2z7lzt5)结束播放,耗时(s):0
Line 130650: 2024-05-08 17:12:30.661 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:1395 OnSslInfo | sending DTLS warning alert: close notify
Line 130651: 2024-05-08 17:12:30.661 D [MediaServer] [8-event poller 19] DtlsTransport.cpp:977 SendPendingOutgoingDtlsData | 31 bytes of DTLS data ready to sent to the peer
Line 130652: 2024-05-08 17:12:30.661 W [MediaServer] [8-event poller 19] WebRtcTransport.cpp:514 onSendSockData | send data failed:31
Line 130653: 2024-05-08 17:12:30.661 I [MediaServer] [8-event poller 19] WebRtcTransport.cpp:502 ~WebRtcTransportImp | CioAZH+9AAA=_145

from zlmediakit.

xiongguangjie avatar xiongguangjie commented on July 22, 2024

查看下这个 https://man7.org/linux/man-pages/man7/udp.7.html
配置下 /proc/sys/net/ipv4/ip_no_pmtu_disc 去关闭这个报错,然后你抓包看看是咋回事,不应该会超过MTU的

from zlmediakit.

pandalee86 avatar pandalee86 commented on July 22, 2024

查看下这个 https://man7.org/linux/man-pages/man7/udp.7.html 配置下 /proc/sys/net/ipv4/ip_no_pmtu_disc 去关闭这个报错,然后你抓包看看是咋回事,不应该会超过MTU的

今天配置完这个之后,没复现问题了。
测试时抓了包,dtls最大包长1301,udp最大包长1460,看上去也都不大。
而且,之前更新的这个提交 62641f4 看上去是要把长报文分多次传输,感觉不配置ip_no_pmtu_disc,也不应该出现message too long的问题吧?

from zlmediakit.

xiongguangjie avatar xiongguangjie commented on July 22, 2024

查看下这个 https://man7.org/linux/man-pages/man7/udp.7.html 配置下 /proc/sys/net/ipv4/ip_no_pmtu_disc 去关闭这个报错,然后你抓包看看是咋回事,不应该会超过MTU的

今天配置完这个之后,没复现问题了。 测试时抓了包,dtls最大包长1301,udp最大包长1460,看上去也都不大。 而且,之前更新的这个提交 62641f4 看上去是要把长报文分多次传输,感觉不配置ip_no_pmtu_disc,也不应该出现message too long的问题吧?

感觉是你这个网络mtu 配置得很小,这个很奇怪,可能是网络问题导致报错吧

from zlmediakit.

pandalee86 avatar pandalee86 commented on July 22, 2024

查看下这个 https://man7.org/linux/man-pages/man7/udp.7.html 配置下 /proc/sys/net/ipv4/ip_no_pmtu_disc 去关闭这个报错,然后你抓包看看是咋回事,不应该会超过MTU的

今天配置完这个之后,没复现问题了。 测试时抓了包,dtls最大包长1301,udp最大包长1460,看上去也都不大。 而且,之前更新的这个提交 62641f4 看上去是要把长报文分多次传输,感觉不配置ip_no_pmtu_disc,也不应该出现message too long的问题吧?

感觉是你这个网络mtu 配置得很小,这个很奇怪,可能是网络问题导致报错吧

分析发现rtp报文中多了16字节的SRTP Auth Tag,导致实际udp总长超过配置中设置的videoMtuSize + 42.
videoMtuSize =1400; 1400+42+16=1458.
MediaServer所在的docker里的网卡mtu是1450, 小于1458.可能是这个原因导致的问题。
实际抓包还有很多1460长度的包,不清楚组包多出的2个字节哪来的。

from zlmediakit.

xiongguangjie avatar xiongguangjie commented on July 22, 2024

查看下这个 https://man7.org/linux/man-pages/man7/udp.7.html 配置下 /proc/sys/net/ipv4/ip_no_pmtu_disc 去关闭这个报错,然后你抓包看看是咋回事,不应该会超过MTU的

今天配置完这个之后,没复现问题了。 测试时抓了包,dtls最大包长1301,udp最大包长1460,看上去也都不大。 而且,之前更新的这个提交 62641f4 看上去是要把长报文分多次传输,感觉不配置ip_no_pmtu_disc,也不应该出现message too long的问题吧?

感觉是你这个网络mtu 配置得很小,这个很奇怪,可能是网络问题导致报错吧

分析发现rtp报文中多了16字节的SRTP Auth Tag,导致实际udp总长超过配置中设置的videoMtuSize + 42. videoMtuSize =1400; 1400+42+16=1458. MediaServer所在的docker里的网卡mtu是1450, 小于1458.可能是这个原因导致的问题。 实际抓包还有很多1460长度的包,不清楚组包多出的2个字节哪来的。

这个你配置下配置文件里面的mtu应该可以解决

from zlmediakit.

pandalee86 avatar pandalee86 commented on July 22, 2024

查看下这个 https://man7.org/linux/man-pages/man7/udp.7.html 配置下 /proc/sys/net/ipv4/ip_no_pmtu_disc 去关闭这个报错,然后你抓包看看是咋回事,不应该会超过MTU的

今天配置完这个之后,没复现问题了。 测试时抓了包,dtls最大包长1301,udp最大包长1460,看上去也都不大。 而且,之前更新的这个提交 62641f4 看上去是要把长报文分多次传输,感觉不配置ip_no_pmtu_disc,也不应该出现message too long的问题吧?

感觉是你这个网络mtu 配置得很小,这个很奇怪,可能是网络问题导致报错吧

分析发现rtp报文中多了16字节的SRTP Auth Tag,导致实际udp总长超过配置中设置的videoMtuSize + 42. videoMtuSize =1400; 1400+42+16=1458. MediaServer所在的docker里的网卡mtu是1450, 小于1458.可能是这个原因导致的问题。 实际抓包还有很多1460长度的包,不清楚组包多出的2个字节哪来的。

这个你配置下配置文件里面的mtu应该可以解决

已经将配置里的mtu改成1300了。
感谢您对这个问题的持续关注和指导。

from zlmediakit.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.