Guest User

Untitled

a guest
Jul 22nd, 2018
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 29.21 KB | None | 0 0
  1. diff --git a/Pipfile b/Pipfile
  2. index ebd27c3..509a86c 100644
  3. --- a/Pipfile
  4. +++ b/Pipfile
  5. @@ -8,6 +8,10 @@ name = "pypi"
  6. requests = "*"
  7. colorama = "*"
  8. websockets = "*"
  9. +aiortc = "*"
  10. +aioice = "*"
  11. +numpy = "*"
  12. +opencv-python = "*"
  13.  
  14. [dev-packages]
  15.  
  16. diff --git a/Pipfile.lock b/Pipfile.lock
  17. index 537a464..7f587b8 100644
  18. --- a/Pipfile.lock
  19. +++ b/Pipfile.lock
  20. @@ -1,7 +1,7 @@
  21. {
  22. "_meta": {
  23. "hash": {
  24. - "sha256": "72faa30545bd7d8ea7bb612de96c61f91148be66e1b93cd2f7faa8ceef3a6c38"
  25. + "sha256": "df7daa88fb2fdbf455e155f191a46f6e7fcecdb2aaae4f60abe217f8a6677bd8"
  26. },
  27. "pipfile-spec": 6,
  28. "requires": {
  29. @@ -16,6 +16,35 @@
  30. ]
  31. },
  32. "default": {
  33. + "aioice": {
  34. + "hashes": [
  35. + "sha256:c06e218fa1a2b346ddea0089544d950a79ce6f2c9757cabc8d548eb3252072d9",
  36. + "sha256:f3623f2e6ba00aa2d41aefe4a7a5f7b8d5e6884a20c2e2a5b013f8164913126b"
  37. + ],
  38. + "index": "pypi",
  39. + "version": "==0.6.2"
  40. + },
  41. + "aiortc": {
  42. + "hashes": [
  43. + "sha256:743eccd61463631762debccf07d425cfef79640c75ad1c19da264c9738ab05e0"
  44. + ],
  45. + "index": "pypi",
  46. + "version": "==0.9.1"
  47. + },
  48. + "asn1crypto": {
  49. + "hashes": [
  50. + "sha256:2f1adbb7546ed199e3c90ef23ec95c5cf3585bac7d11fb7eb562a3fe89c64e87",
  51. + "sha256:9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49"
  52. + ],
  53. + "version": "==0.24.0"
  54. + },
  55. + "attrs": {
  56. + "hashes": [
  57. + "sha256:4b90b09eeeb9b88c35bc642cbac057e45a5fd85367b985bd2809c62b7b939265",
  58. + "sha256:e0d0eb91441a3b53dab4d9b743eafc1ac44476296a2053b6ca3af0b139faf87b"
  59. + ],
  60. + "version": "==18.1.0"
  61. + },
  62. "beautifulsoup4": {
  63. "hashes": [
  64. "sha256:11a9a27b7d3bddc6d86f59fb76afb70e921a25ac2d6cc55b40d072bd68435a76",
  65. @@ -38,6 +67,43 @@
  66. ],
  67. "version": "==2018.4.16"
  68. },
  69. + "cffi": {
  70. + "hashes": [
  71. + "sha256:151b7eefd035c56b2b2e1eb9963c90c6302dc15fbd8c1c0a83a163ff2c7d7743",
  72. + "sha256:1553d1e99f035ace1c0544050622b7bc963374a00c467edafac50ad7bd276aef",
  73. + "sha256:1b0493c091a1898f1136e3f4f991a784437fac3673780ff9de3bcf46c80b6b50",
  74. + "sha256:2ba8a45822b7aee805ab49abfe7eec16b90587f7f26df20c71dd89e45a97076f",
  75. + "sha256:3bb6bd7266598f318063e584378b8e27c67de998a43362e8fce664c54ee52d30",
  76. + "sha256:3c85641778460581c42924384f5e68076d724ceac0f267d66c757f7535069c93",
  77. + "sha256:3eb6434197633b7748cea30bf0ba9f66727cdce45117a712b29a443943733257",
  78. + "sha256:495c5c2d43bf6cebe0178eb3e88f9c4aa48d8934aa6e3cddb865c058da76756b",
  79. + "sha256:4c91af6e967c2015729d3e69c2e51d92f9898c330d6a851bf8f121236f3defd3",
  80. + "sha256:57b2533356cb2d8fac1555815929f7f5f14d68ac77b085d2326b571310f34f6e",
  81. + "sha256:770f3782b31f50b68627e22f91cb182c48c47c02eb405fd689472aa7b7aa16dc",
  82. + "sha256:79f9b6f7c46ae1f8ded75f68cf8ad50e5729ed4d590c74840471fc2823457d04",
  83. + "sha256:7a33145e04d44ce95bcd71e522b478d282ad0eafaf34fe1ec5bbd73e662f22b6",
  84. + "sha256:857959354ae3a6fa3da6651b966d13b0a8bed6bbc87a0de7b38a549db1d2a359",
  85. + "sha256:87f37fe5130574ff76c17cab61e7d2538a16f843bb7bca8ebbc4b12de3078596",
  86. + "sha256:95d5251e4b5ca00061f9d9f3d6fe537247e145a8524ae9fd30a2f8fbce993b5b",
  87. + "sha256:9d1d3e63a4afdc29bd76ce6aa9d58c771cd1599fbba8cf5057e7860b203710dd",
  88. + "sha256:a36c5c154f9d42ec176e6e620cb0dd275744aa1d804786a71ac37dc3661a5e95",
  89. + "sha256:a6a5cb8809091ec9ac03edde9304b3ad82ad4466333432b16d78ef40e0cce0d5",
  90. + "sha256:ae5e35a2c189d397b91034642cb0eab0e346f776ec2eb44a49a459e6615d6e2e",
  91. + "sha256:b0f7d4a3df8f06cf49f9f121bead236e328074de6449866515cea4907bbc63d6",
  92. + "sha256:b75110fb114fa366b29a027d0c9be3709579602ae111ff61674d28c93606acca",
  93. + "sha256:ba5e697569f84b13640c9e193170e89c13c6244c24400fc57e88724ef610cd31",
  94. + "sha256:be2a9b390f77fd7676d80bc3cdc4f8edb940d8c198ed2d8c0be1319018c778e1",
  95. + "sha256:ca1bd81f40adc59011f58159e4aa6445fc585a32bb8ac9badf7a2c1aa23822f2",
  96. + "sha256:d5d8555d9bfc3f02385c1c37e9f998e2011f0db4f90e250e5bc0c0a85a813085",
  97. + "sha256:e55e22ac0a30023426564b1059b035973ec82186ddddbac867078435801c7801",
  98. + "sha256:e90f17980e6ab0f3c2f3730e56d1fe9bcba1891eeea58966e89d352492cc74f4",
  99. + "sha256:ecbb7b01409e9b782df5ded849c178a0aa7c906cf8c5a67368047daab282b184",
  100. + "sha256:ed01918d545a38998bfa5902c7c00e0fee90e957ce036a4000a88e3fe2264917",
  101. + "sha256:edabd457cd23a02965166026fd9bfd196f4324fe6032e866d0f3bd0301cd486f",
  102. + "sha256:fdf1c1dc5bafc32bc5d08b054f94d659422b05aba244d6be4ddc1c72d9aa70fb"
  103. + ],
  104. + "version": "==1.11.5"
  105. + },
  106. "chardet": {
  107. "hashes": [
  108. "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
  109. @@ -53,6 +119,36 @@
  110. "index": "pypi",
  111. "version": "==0.3.9"
  112. },
  113. + "crcmod": {
  114. + "hashes": [
  115. + "sha256:dc7051a0db5f2bd48665a990d3ec1cc305a466a77358ca4492826f41f283601e"
  116. + ],
  117. + "version": "==1.7"
  118. + },
  119. + "cryptography": {
  120. + "hashes": [
  121. + "sha256:21af753934f2f6d1a10fe8f4c0a64315af209ef6adeaee63ca349797d747d687",
  122. + "sha256:27bb401a20a838d6d0ea380f08c6ead3ccd8c9d8a0232dc9adcc0e4994576a66",
  123. + "sha256:29720c4253263cff9aea64585adbbe85013ba647f6e98367efff9db2d7193ded",
  124. + "sha256:2a35b7570d8f247889784010aac8b384fd2e4a47b33e15c4a60b45a7c1944120",
  125. + "sha256:42c531a6a354407f42ee07fda5c2c0dc822cf6d52744949c182f2b295fbd4183",
  126. + "sha256:5eb86f03f9c4f0ac2336ac5431271072ddf7ecc76b338e26366732cfac58aa19",
  127. + "sha256:67f7f57eae8dede577f3f7775957f5bec93edd6bdb6ce597bb5b28e1bdf3d4fb",
  128. + "sha256:6ec84edcbc966ae460560a51a90046503ff0b5b66157a9efc61515c68059f6c8",
  129. + "sha256:7ba834564daef87557e7fcd35c3c3183a4147b0b3a57314e53317360b9b201b3",
  130. + "sha256:7d7f084cbe1fdb82be5a0545062b59b1ad3637bc5a48612ac2eb428ff31b31ea",
  131. + "sha256:82409f5150e529d699e5c33fa8fd85e965104db03bc564f5f4b6a9199e591f7c",
  132. + "sha256:87d092a7c2a44e5f7414ab02fb4145723ebba411425e1a99773531dd4c0e9b8d",
  133. + "sha256:8c56ef989342e42b9fcaba7c74b446f0cc9bed546dd00034fa7ad66fc00307ef",
  134. + "sha256:9449f5d4d7c516a6118fa9210c4a00f34384cb1d2028672100ee0c6cce49d7f6",
  135. + "sha256:bc2301170986ad82d9349a91eb8884e0e191209c45f5541b16aa7c0cfb135978",
  136. + "sha256:c132bab45d4bd0fff1d3fe294d92b0a6eb8404e93337b3127bdec9f21de117e6",
  137. + "sha256:c3d945b7b577f07a477700f618f46cbc287af3a9222cd73035c6ef527ef2c363",
  138. + "sha256:cee18beb4c807b5c0b178f4fa2fae03cef9d51821a358c6890f8b23465b7e5d2",
  139. + "sha256:d01dfc5c2b3495184f683574e03c70022674ca9a7be88589c5aba130d835ea90"
  140. + ],
  141. + "version": "==2.3"
  142. + },
  143. "idna": {
  144. "hashes": [
  145. "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e",
  146. @@ -60,6 +156,133 @@
  147. ],
  148. "version": "==2.7"
  149. },
  150. + "netifaces": {
  151. + "hashes": [
  152. + "sha256:0083ff8d89c559d0da0811c4930cf36e4945da0f03749e0f108678098d7d1607",
  153. + "sha256:179f2463469fe69c829c96c7b332c7fd3f01652311e36ae11e409e5b34eb9dad",
  154. + "sha256:19df6feff2af7a9179e42afdd01d79616d85b7ff4401b55ffce2df29d512a017",
  155. + "sha256:1a4082a52f521ceeaf3d0ff25c61a06d46444f3578f487935652ecc93becf538",
  156. + "sha256:1edeea7d739b1d716d15214039386e999f2e374aaeac0703092132b4e55ba461",
  157. + "sha256:2acb23ca092cc53b2b1f374132bbef5dd843767f6b10d31024f958474a1dfe96",
  158. + "sha256:38969c101f1e61c2a53af6a7b635f63e81085ae87413f1f5551a4d7057f5f773",
  159. + "sha256:4817871b226082600b64578549b9932bb07c1a42e9311ddd7c9dad08ff1fb22f",
  160. + "sha256:4bb6b02b7c485a595a9d75346df3a77fcaa12d2352437c49c2d73ed968572d72",
  161. + "sha256:674498dad41dacd86ec82e9e1793f9d8716755085c3776f051a266b1634a0b60",
  162. + "sha256:7ea8eb1e824f74c161396f0d6d76fa3943462ee9a4629c387c10399d2aee058c",
  163. + "sha256:8a69dc2743dcbb9b87fa3453820852f0feabc17b03d3841619e8e63f5d3902d5",
  164. + "sha256:9cf8cb2de7524c34808e6111dfb9f89e3b7c568e6953b3e02b8397447a6d8303",
  165. + "sha256:a77263e046636a761a2c3eeb0a56b5f8fa64f865efec91a9be008a46412b4ddd",
  166. + "sha256:aea569ce1a5a75b010758097199f84d9a3a109a696473c635bcf82f8a43cc551",
  167. + "sha256:bd590fcb75421537d4149825e1e63cca225fd47dad861710c46bd1cb329d8cbd",
  168. + "sha256:e1037cfad0e99a23fb4829f40302f3696395358950ba9f0315363a0e1eb04af6",
  169. + "sha256:e6d52aee254f9cf6192b54c156c67d54dcf451bec6781580844af892e4bf36bb",
  170. + "sha256:e76d38d9cff51ecf9fd5b8d0adf63f7b8875e1ac8548ccb52264939e308b771e"
  171. + ],
  172. + "version": "==0.10.7"
  173. + },
  174. + "numpy": {
  175. + "hashes": [
  176. + "sha256:07379fe0b450f6fd6e5934a9bc015025bb4ce1c8fbed3ca8bef29328b1bc9570",
  177. + "sha256:085afac75bbc97a096744fcfc97a4b321c5a87220286811e85089ae04885acdd",
  178. + "sha256:2d6481c6bdab1c75affc0fc71eb1bd4b3ecef620d06f2f60c3f00521d54be04f",
  179. + "sha256:2df854df882d322d5c23087a4959e145b953dfff2abe1774fec4f639ac2f3160",
  180. + "sha256:381ad13c30cd1d0b2f3da8a0c1a4aa697487e8bb0e9e0cbeb7439776bcb645f8",
  181. + "sha256:385f1ce46e08676505b692bfde918c1e0b350963a15ef52d77691c2cf0f5dbf6",
  182. + "sha256:4130e5ae16c656b7de654dc5e595cfeb85d3a4b0bb0734d19c0dce6dc7ee0e07",
  183. + "sha256:4d278c2261be6423c5e63d8f0ceb1b0c6db3ff83f2906f4b860db6ae99ca1bb5",
  184. + "sha256:51c5dcb51cf88b34b7d04c15f600b07c6ccbb73a089a38af2ab83c02862318da",
  185. + "sha256:589336ba5199c8061239cf446ee2f2f1fcc0c68e8531ee1382b6fc0c66b2d388",
  186. + "sha256:5ae3564cb630e155a650f4f9c054589848e97836bebae5637240a0d8099f817b",
  187. + "sha256:5edf1acc827ed139086af95ce4449b7b664f57a8c29eb755411a634be280d9f2",
  188. + "sha256:6b82b81c6b3b70ed40bc6d0b71222ebfcd6b6c04a6e7945a936e514b9113d5a3",
  189. + "sha256:6c57f973218b776195d0356e556ec932698f3a563e2f640cfca7020086383f50",
  190. + "sha256:758d1091a501fd2d75034e55e7e98bfd1370dc089160845c242db1c760d944d9",
  191. + "sha256:8622db292b766719810e0cb0f62ef6141e15fe32b04e4eb2959888319e59336b",
  192. + "sha256:8b8dcfcd630f1981f0f1e3846fae883376762a0c1b472baa35b145b911683b7b",
  193. + "sha256:91fdd510743ae4df862dbd51a4354519dd9fb8941347526cd9c2194b792b3da9",
  194. + "sha256:97fa8f1dceffab782069b291e38c4c2227f255cdac5f1e3346666931df87373e",
  195. + "sha256:9b705f18b26fb551366ab6347ba9941b62272bf71c6bbcadcd8af94d10535241",
  196. + "sha256:9d69967673ab7b028c2df09cae05ba56bf4e39e3cb04ebe452b6035c3b49848e",
  197. + "sha256:9e1f53afae865cc32459ad211493cf9e2a3651a7295b7a38654ef3d123808996",
  198. + "sha256:a4a433b3a264dbc9aa9c7c241e87c0358a503ea6394f8737df1683c7c9a102ac",
  199. + "sha256:baadc5f770917ada556afb7651a68176559f4dca5f4b2d0947cd15b9fb84fb51",
  200. + "sha256:c725d11990a9243e6ceffe0ab25a07c46c1cc2c5dc55e305717b5afe856c9608",
  201. + "sha256:d696a8c87315a83983fc59dd27efe034292b9e8ad667aeae51a68b4be14690d9",
  202. + "sha256:e1864a4e9f93ddb2dc6b62ccc2ec1f8250ff4ac0d3d7a15c8985dd4e1fbd6418",
  203. + "sha256:e1d18421a7e2ad4a655b76e65d549d4159f8874c18a417464c1d439ee7ccc7cd"
  204. + ],
  205. + "index": "pypi",
  206. + "version": "==1.14.5"
  207. + },
  208. + "opencv-python": {
  209. + "hashes": [
  210. + "sha256:02342c264ac95fddd6c5dfdc2bf71bf65617d4b0006b1d56b699b559671f8c9d",
  211. + "sha256:049b080c53bc660bce0819cbabeade21bef8cc4f8bd2d4b407e62a576c70ef44",
  212. + "sha256:050202bfcdb4d039dacdb567fe7c04f221f49b59ae5c50c2b111090e2c2451c6",
  213. + "sha256:0b75aa8255eea19c3382dad18423a9809873962b1f8488bc7a232dccb847bfc1",
  214. + "sha256:0fd4c86dbce58bdda149f5175093d50a0396ee5a981675c21b14a30aa667b97f",
  215. + "sha256:151d738d479df018edd050ed146567c6044a19b7b7e3d4e38c726e904bad7a3e",
  216. + "sha256:22e4b07e30da981a4013141809eb974a6f14cd712fa4fa80f8e70d8cc8c155f8",
  217. + "sha256:2cea809afe32cdccf97d66b131afc0fed80076244fb77b68ad9bf016d9cdc261",
  218. + "sha256:2ed45cfe330c0cbd925c5eb8de32b78fae68ae02952b46bf04af813eefc065b7",
  219. + "sha256:57b73647e25402cfd4ecb42d5bb3ddc5ec740a3124b4559c215c073127971cd5",
  220. + "sha256:66f35f28b705272f9f54ecb6decb8954d5b0b2db8506cdcf0c0f9b7014b5b446",
  221. + "sha256:76c732905bd84b84d7c6d8b924471a54d02088e649e006ad8abda4b630a5de93",
  222. + "sha256:7fef1125b7a38ce6a839338109de0dfba604552d5ac2f5a839ed1eb5cf8b5887",
  223. + "sha256:856f492631ac5523dd10c8273d8b7ec708199e4a9096deea880a6fc41ffd1bc9",
  224. + "sha256:a875254c00af87e0b9d81026dff165c7233a37672764f0d647a93fd702afa3ef",
  225. + "sha256:ba7571e14f7aca54552dc0ee71714bc4466c5076b571fed2dd6e1af6879a9532",
  226. + "sha256:bb79ef5db35f08bfd340cac25b89eab1dff0d5cbada9015a988d9092e48bbe5c",
  227. + "sha256:c2cb706934cc55023a2fa597422b4dd18b7bf3cb14033bfe00633b0f16ab9b48",
  228. + "sha256:d34fc04624220b0db3652cf52fc40867267a5c92825850ead98da686aea61bb6",
  229. + "sha256:e27976369de71b159d4e6cb2599bde860570c82eebd6fe2daaca494e6d3037b5",
  230. + "sha256:f4e3d807319e97e406fe76e722a67ec4c20dc2c26f7fea51b66cbb8a5c078eb1",
  231. + "sha256:fc9d2874bfd29dcf238f3d57871d718265573e5e0776980f6eea77409a9ce400"
  232. + ],
  233. + "index": "pypi",
  234. + "version": "==3.4.1.15"
  235. + },
  236. + "pycparser": {
  237. + "hashes": [
  238. + "sha256:99a8ca03e29851d96616ad0404b4aad7d9ee16f25c9f9708a11faf2810f7b226"
  239. + ],
  240. + "version": "==2.18"
  241. + },
  242. + "pyee": {
  243. + "hashes": [
  244. + "sha256:47f8fa96d6dee61c82001831e1fbba55f3f808003a322d0e6653aa01c59f6b9e",
  245. + "sha256:4ec22817297b7024f89721cc34f790ee2767c5b5ca44284c565ee643abafbe32"
  246. + ],
  247. + "version": "==5.0.0"
  248. + },
  249. + "pylibsrtp": {
  250. + "hashes": [
  251. + "sha256:0038538188149b97fcbf330ea81889b981581b1810789da85c4e20bd7ed8d2a4",
  252. + "sha256:05ddedaac59b11773223908ac762f54f9a39c9757afa01447f56b13d743c6419",
  253. + "sha256:0b1329b69d3eeac9cd05d42e289f7317a99ad49c245facb500ae8d894e53c447",
  254. + "sha256:175bf88fb5c23fde0287696a6b0febfb73c720cc0636bf1f3ed5b1b38c1898d0",
  255. + "sha256:2307dedd90a40042c3bdf157cef0348c5b1ddda362554d973abdc3c4864d0222",
  256. + "sha256:2514dc8cee864eb5becd46465a7550e2b2c7f2d6560b238ae72e5abde23254ac",
  257. + "sha256:288294536756e3e3c22218ced6b6c4a4001fd8d3326a2f62b1bf23a9aaae2b4e",
  258. + "sha256:2d01ccfede1f8f4fbb0702792c3309b6570bdef2f5ccc1701c05e1042c99de1a",
  259. + "sha256:46fe5c44dc382e1a3466b9f3ead640919427f0c6ab1235d5b03c04cc97fafb0b",
  260. + "sha256:4e0f15d966a183dbbbbe67f3d78c69ea8aa870c717aeafec4082f87e9427e7c6",
  261. + "sha256:6a20a1bc1bca93225374450c17fe01770fc03136ba1671296c6e283c72d14f75",
  262. + "sha256:9eebb78a1a0def6dbeca97cc5500947c42f9c1841245326f67444e33c88ce679",
  263. + "sha256:b59ad98677f52e931652052102a850cccf7103feba9e974a05e861bb53e5eb30",
  264. + "sha256:f0a12d6676c3c3447e792ad56b0e4d3868188dd9b616056edaaebfcc28ffa4fd",
  265. + "sha256:f9f6e46fb4f07fa7ad910514ebbdca3259deb010230715ca7f2cf430df5a9b60",
  266. + "sha256:fbd6b92e9a1c8611cfcd16d6bead82709838803b7b8a241b22ee991d4323173a"
  267. + ],
  268. + "version": "==0.5.5"
  269. + },
  270. + "pyopenssl": {
  271. + "hashes": [
  272. + "sha256:26ff56a6b5ecaf3a2a59f132681e2a80afcc76b4f902f612f518f92c2a1bf854",
  273. + "sha256:6488f1423b00f73b7ad5167885312bb0ce410d3312eb212393795b53c8caa580"
  274. + ],
  275. + "version": "==18.0.0"
  276. + },
  277. "requests": {
  278. "hashes": [
  279. "sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1",
  280. @@ -68,6 +291,13 @@
  281. "index": "pypi",
  282. "version": "==2.19.1"
  283. },
  284. + "six": {
  285. + "hashes": [
  286. + "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9",
  287. + "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb"
  288. + ],
  289. + "version": "==1.11.0"
  290. + },
  291. "urllib3": {
  292. "hashes": [
  293. "sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf",
  294. @@ -78,22 +308,30 @@
  295. },
  296. "websockets": {
  297. "hashes": [
  298. - "sha256:0b7b561bcbf992edd54e961b89551b5b6073415a0446fe445bd6554d41dabb95",
  299. - "sha256:2469c98f2254878a49a6eda248d3ed8a89bbdca85cc316ff72ea15924cec9e1f",
  300. - "sha256:29b676568e4fcb1a05064473b96243ef4e9391f251b4c485cf7f93507787b459",
  301. - "sha256:2a05e42400de009c1c330167cd6d90b300d2364d2dd1e6539d01a6a22901967b",
  302. - "sha256:39241fb291c1648e33dc41208be876a5771466291f0f6f7bff8f6732373084bd",
  303. - "sha256:43c332fc331541c57d40c124089b270d668c25a6b04908bd688969375db7327f",
  304. - "sha256:480259ec6e80f28859f23b5c231beb856fb96ab30e64ee621fdaf27da1515604",
  305. - "sha256:9049ec652713f5132b512d3498c2d37264580714ccc95dbc0f7f9622c3f6da7e",
  306. - "sha256:a17c45716178a42cc8f66f587507f01e169a75556749d88f714e4c1d295885d1",
  307. - "sha256:a49d315db5a7a19d55422e1678e8a1c3b9661d7296bef3179fa620cf80b12674",
  308. - "sha256:a911beb8149d7dae9d4c942927c448c05c41dfaa9c002a6bc26e269df932769b",
  309. - "sha256:cf34479130704797ce28a478f0b5985abe71ea90999a1c956e15fe0b0b11d0dc",
  310. - "sha256:d3724acff61ee1029fefc614cf005982338b033998a0b71fbb13a0a2fd99ab6f"
  311. + "sha256:0e2f7d6567838369af074f0ef4d0b802d19fa1fee135d864acc656ceefa33136",
  312. + "sha256:2a16dac282b2fdae75178d0ed3d5b9bc3258dabfae50196cbb30578d84b6f6a6",
  313. + "sha256:5a1fa6072405648cb5b3688e9ed3b94be683ce4a4e5723e6f5d34859dee495c1",
  314. + "sha256:5c1f55a1274df9d6a37553fef8cff2958515438c58920897675c9bc70f5a0538",
  315. + "sha256:669d1e46f165e0ad152ed8197f7edead22854a6c90419f544e0f234cc9dac6c4",
  316. + "sha256:695e34c4dbea18d09ab2c258994a8bf6a09564e762655408241f6a14592d2908",
  317. + "sha256:6b2e03d69afa8d20253455e67b64de1a82ff8612db105113cccec35d3f8429f0",
  318. + "sha256:79ca7cdda7ad4e3663ea3c43bfa8637fc5d5604c7737f19a8964781abbd1148d",
  319. + "sha256:7fd2dd9a856f72e6ed06f82facfce01d119b88457cd4b47b7ae501e8e11eba9c",
  320. + "sha256:82c0354ac39379d836719a77ee360ef865377aa6fdead87909d50248d0f05f4d",
  321. + "sha256:8f3b956d11c5b301206382726210dc1d3bee1a9ccf7aadf895aaf31f71c3716c",
  322. + "sha256:91ec98640220ae05b34b79ee88abf27f97ef7c61cf525eec57ea8fcea9f7dddb",
  323. + "sha256:952be9540d83dba815569d5cb5f31708801e0bbfc3a8c5aef1890b57ed7e58bf",
  324. + "sha256:99ac266af38ba1b1fe13975aea01ac0e14bb5f3a3200d2c69f05385768b8568e",
  325. + "sha256:9fa122e7adb24232247f8a89f2d9070bf64b7869daf93ac5e19546b409e47e96",
  326. + "sha256:a0873eadc4b8ca93e2e848d490809e0123eea154aa44ecd0109c4d0171869584",
  327. + "sha256:cb998bd4d93af46b8b49ecf5a72c0a98e5cc6d57fdca6527ba78ad89d6606484",
  328. + "sha256:e02e57346f6a68523e3c43bbdf35dde5c440318d1f827208ae455f6a2ace446d",
  329. + "sha256:e79a5a896bcee7fff24a788d72e5c69f13e61369d055f28113e71945a7eb1559",
  330. + "sha256:ee55eb6bcf23ecc975e6b47c127c201b913598f38b6a300075f84eeef2d3baff",
  331. + "sha256:f1414e6cbcea8d22843e7eafdfdfae3dd1aba41d1945f6ca66e4806c07c4f454"
  332. ],
  333. "index": "pypi",
  334. - "version": "==5.0.1"
  335. + "version": "==6.0"
  336. }
  337. },
  338. "develop": {}
  339. diff --git a/client.py b/client.py
  340. index 4d7944a..6d5197b 100644
  341. --- a/client.py
  342. +++ b/client.py
  343. @@ -53,6 +53,7 @@ if __name__ == '__main__':
  344. logging.basicConfig(filename=pinylib.CONFIG.DEBUG_FILE_NAME,
  345. level=pinylib.CONFIG.DEBUG_LEVEL, format=formater)
  346. log.info('Starting pinylib webrtc version: %s' % pinylib.__version__)
  347. + log.addHandler('ice')
  348. else:
  349. log.addHandler(logging.NullHandler())
  350. main()
  351. diff --git a/config.py b/config.py
  352. index 5a38b8d..2768c24 100644
  353. --- a/config.py
  354. +++ b/config.py
  355. @@ -1,17 +1,17 @@
  356. # Tinychat account.
  357. -ACCOUNT = ''
  358. +ACCOUNT = 'coco'
  359. # Password for account
  360. -PASSWORD = ''
  361. +PASSWORD = 'nigga'
  362. # Fallback rtc version.
  363. FALLBACK_RTC_VERSION = '2.0.22-4'
  364. # Log chat messages and events.
  365. CHAT_LOGGING = False
  366. # Show additional info/errors in console.
  367. -DEBUG_MODE = False
  368. +DEBUG_MODE = True
  369. # Log debug info to file.
  370. DEBUG_TO_FILE = False
  371. # Logging level for the debug file.
  372. -DEBUG_LEVEL = 30
  373. +DEBUG_LEVEL = 10
  374. # Use colors for the console.
  375. CONSOLE_COLORS = True
  376. # Time format.
  377. diff --git a/pinylib.py b/pinylib.py
  378. index e5dd814..b66ef6b 100644
  379. --- a/pinylib.py
  380. +++ b/pinylib.py
  381. @@ -4,6 +4,14 @@ import traceback
  382. import logging
  383. import time
  384. import websockets
  385. +from aiortc import (RTCPeerConnection, RTCSessionDescription, VideoStreamTrack, AudioStreamTrack,
  386. + RTCIceGatherer, RTCIceTransport, RTCIceParameters, RTCIceServer, RTCConfiguration)
  387. +from aiortc.mediastreams import VideoFrame
  388. +import math
  389. +import os
  390. +import cv2
  391. +import numpy
  392. +import aioice
  393. from colorama import init, Fore, Style
  394. import config
  395.  
  396. @@ -35,6 +43,41 @@ COLOR = {
  397. 'bright_magenta': Style.BRIGHT + Fore.MAGENTA
  398. }
  399.  
  400. +BLUE = (255, 0, 0)
  401. +GREEN = (0, 255, 0)
  402. +RED = (0, 0, 255)
  403. +
  404. +
  405. +def frame_from_bgr(data_bgr):
  406. + data_yuv = cv2.cvtColor(data_bgr, cv2.COLOR_BGR2YUV_YV12)
  407. + return VideoFrame(width=data_bgr.shape[1], height=data_bgr.shape[0], data=data_yuv.tobytes())
  408. +
  409. +def frame_to_bgr(frame):
  410. + data_flat = numpy.frombuffer(frame.data, numpy.uint8)
  411. + data_yuv = data_flat.reshape((math.ceil(frame.height * 12 / 8), frame.width))
  412. + return cv2.cvtColor(data_yuv, cv2.COLOR_YUV2BGR_YV12)
  413. +
  414. +
  415. +class ColorVideoStreamTrack(VideoStreamTrack):
  416. + def __init__(self, width, height, color):
  417. + data_bgr = numpy.zeros((height, width, 3), numpy.uint8)
  418. + data_bgr[:, :] = color
  419. + self.frame = frame_from_bgr(data_bgr=data_bgr)
  420. +
  421. + async def recv(self):
  422. + return self.frame
  423. +
  424. +
  425. +class CombinedVideoStreamTrack(VideoStreamTrack):
  426. + def __init__(self, tracks):
  427. + self.tracks = tracks
  428. +
  429. + async def recv(self):
  430. + coros = [track.recv() for track in self.tracks]
  431. + frames = await asyncio.gather(*coros)
  432. + data_bgrs = [frame_to_bgr(frame) for frame in frames]
  433. + data_bgr = numpy.hstack(data_bgrs)
  434. + return frame_from_bgr(data_bgr)
  435.  
  436. class TinychatRTCClient(object):
  437. def __init__(self, room, nickname='', account=None, password=None):
  438. @@ -56,6 +99,11 @@ class TinychatRTCClient(object):
  439. self._ws = None
  440. self._req = 1
  441. self.is_published = False
  442. + self.rtc_env = RTCPeerConnection()
  443. + self.ice_env = None
  444. +
  445. + self.rtc_env.addTrack(AudioStreamTrack())
  446. + self.rtc_env.addTrack(VideoStreamTrack())
  447.  
  448. def console_write(self, color, message):
  449. """
  450. @@ -145,6 +193,7 @@ class TinychatRTCClient(object):
  451. json_data = json.loads(data)
  452. log.debug(f'DATA: {data}')
  453. event = json_data['tc']
  454. + print(json_data)
  455. if event == 'ping':
  456. # just pong immediately, no real need to handle this event.
  457. await self.send({'tc': 'pong'})
  458. @@ -224,16 +273,17 @@ class TinychatRTCClient(object):
  459. await self.on_yut_stop(json_data)
  460.  
  461. elif event == 'iceservers':
  462. - pass
  463. + self.ice_servers = json_data['servers']
  464.  
  465. elif event == 'stream_connected':
  466. - pass
  467. + print(json_data)
  468.  
  469. elif event == 'stream_closed':
  470. - pass
  471. + print(json_data)
  472.  
  473. elif event == 'sdp':
  474. - pass
  475. + print(json_data)
  476. + await self.sdp_events(json_data)
  477.  
  478. else:
  479. log.warning(f'Unknown Event: {event}, {json_data}')
  480. @@ -242,6 +292,78 @@ class TinychatRTCClient(object):
  481. if config.DEBUG_MODE:
  482. self.console_write(COLOR['white'], data)
  483.  
  484. +
  485. + def description_to_dict(self, description):
  486. + return {
  487. + 'sdp': description.sdp,
  488. + 'type': description.type
  489. + }
  490. +
  491. + def description_from_string(self, descr_dict):
  492. + return RTCSessionDescription(
  493. + sdp=descr_dict['sdp'],
  494. + type=descr_dict['type'])
  495. +
  496. + async def sdp_events(self, json_data):
  497. + if json_data['type'] == 'answer':
  498. + await self.rtc_env.setRemoteDescription(json_data)
  499. + await self.rtc_env.setLocalDescription(await self.rtc_env.createAnswer())
  500. + await self.do_sdp_offer(data=self.rtc_env.localDescription, uid=json_data['handle'])
  501. + print('Sending offer')
  502. + else:
  503. + self.ice_env = RTCIceServer(json_data)
  504. + self.rtc_env = RTCPeerConnection(configuration=RTCConfiguration(iceServers=[self.ice_env]))
  505. + #self.rtc_env.addTrack(VideoStreamTrack())
  506. + #self.rtc_env.addTrack(AudoStreamTrack())
  507. + await self.rtc_env.setLocalDescription(await self.rtc_env.createOffer())
  508. + await self.do_sdp_answer(data=self.rtc_env.localDescription, uid=json_data['handle'])
  509. + print('Sending answer')
  510. +
  511. + async def do_sdp_answer(self, data, uid):
  512. + _data = data
  513. + _uid = uid
  514. + payload = {
  515. + 'tc': 'sdp',
  516. + 'type': 'answer',
  517. + 'sdp': self.description_to_dict(_data),
  518. + 'handle': _uid
  519. + }
  520. + await self.send(payload)
  521. +
  522. + async def do_sdp_offer(self, data, uid):
  523. + _data = data
  524. + _uid = uid
  525. + payload = {
  526. + 'tc': 'sdp',
  527. + 'type': 'offer',
  528. + 'sdp': self.description_to_dict(_data),
  529. + 'handle': _uid
  530. + }
  531. + await self.send(payload)
  532. +
  533. + async def send_sdp(self, data, uid):
  534. + _sdp_data = data
  535. + _uid = uid
  536. + payload = {
  537. + 'tc': 'sdp',
  538. + 'type': 'offer',
  539. + 'sdp': _sdp_data,
  540. + 'handle': _uid
  541. + }
  542. + await self.send(payload)
  543. +
  544. + async def send_trickle(self, candidate, uid):
  545. + _uid = uid
  546. + _candidate = candidate
  547. + payload = {
  548. + 'tc': 'trickle',
  549. + 'handle': _uid,
  550. + 'candidate': _candidate
  551. + }
  552. + await self.send(payload)
  553. +
  554. +
  555. +
  556. async def on_closed(self, code):
  557. """
  558. This gets sent when ever the connection gets closed by the server for what ever reason.
  559. @@ -283,6 +405,7 @@ class TinychatRTCClient(object):
  560. if self.is_client_mod:
  561. await self.send_banlist_msg()
  562.  
  563. +
  564. async def on_room_info(self, room_info):
  565. """
  566. Received when the client have joined the room successfully.
  567. @@ -445,6 +568,10 @@ class TinychatRTCClient(object):
  568. if uid != self.client_id:
  569. self.active_user = self.users.search(uid)
  570. await self.message_handler(msg)
  571. + if '?ice' in msg:
  572. + await self.get_ice()
  573. + elif '?sdp' in msg:
  574. + await self.do_sdp_offer()
  575. self.active_user.msg_time = ts
  576.  
  577. async def message_handler(self, msg):
  578. @@ -494,6 +621,7 @@ class TinychatRTCClient(object):
  579. if _user.is_waiting:
  580. _user.is_waiting = False
  581. self.console_write(COLOR['yellow'], f'{_user.nick}:{uid} is broadcasting.')
  582. + await self.send_subscribe(uid)
  583.  
  584. async def on_unpublish(self, uid):
  585. """
  586. @@ -677,6 +805,20 @@ class TinychatRTCClient(object):
  587. log.info(f'Token request failed\ntoken={token}')
  588. return False
  589.  
  590. + async def get_ice(self):
  591. + payload = {
  592. + 'tc': 'getice'
  593. + }
  594. + await self.send(payload)
  595. +
  596. + async def send_subscribe(self, uid):
  597. + payload = {
  598. + 'tc': 'subscribe',
  599. + 'handle': uid
  600. + }
  601. + print('Sending {} to {}'.format(payload['tc'], payload['handle']))
  602. + await self.send(payload)
  603. +
  604. async def set_nick(self):
  605. """ Send a nick message. """
  606. payload = {
  607. @@ -968,7 +1110,10 @@ class TinychatRTCClient(object):
  608. await self.send(payload)
  609.  
  610. async def send(self, payload):
  611. - _payload = json.dumps(payload)
  612. + try:
  613. + _payload = json.dumps(payload)
  614. + except:
  615. + _payload = payload
  616. await self._ws.send(_payload)
  617. self._req += 1
  618. log.debug(f'{_payload}')
Add Comment
Please, Sign In to add comment