{
    "componentChunkName": "component---src-templates-issues-tsx",
    "path": "/issues/568",
    "result": {"data":{"issuesJson":{"id":"08a353fc-1f33-5bc6-b8d4-351caf78fea5","title":"tl-open-source/tl-rtc-file: 基于 WebRTC 的媒体流传输工具","number":568,"bodyHTML":"<div align=\"center\" dir=\"auto\">\n<p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\"><img src=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\" width=\"100%\" height=\"3\" data-animated-image=\"\" data-canonical-src=\"https://cdn.jsdelivr.net/gh/eryajf/tu@main/img/image_20240420_214408.gif\" style=\"max-width: 100%; height: auto; max-height: 3px;\"></a><br><br></p>\n<markdown-accessiblity-table><table role=\"table\">\n<thead>\n<tr>\n<th align=\"right\">Repos</th>\n<th align=\"left\"><a href=\"https://github.com/tl-open-source/tl-rtc-file\">tl-open-source/tl-rtc-file</a></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td align=\"right\"><strong>Views</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/039819c069774307ebe833fdc96a666b5c6e086774cd26592a104fec19ef9afa/68747470733a2f2f76696577732e77686174696c656172656e65642e746f6461792f76696577732f6769746875622f746c2d6f70656e2d736f757263652f746c2d7274632d66696c652e737667\" alt=\"views\" data-canonical-src=\"https://views.whatilearened.today/views/github/tl-open-source/tl-rtc-file.svg\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>Stars</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/6217d9ea22aa6ece938d781790ff8106dd153b959068290eba784fd90834f786/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f746c2d6f70656e2d736f757263652f746c2d7274632d66696c653f636f6c6f723d663266303864266c6f676f3d556e64657274616c65266c6f676f436f6c6f723d656234363330\" alt=\"stars\" data-canonical-src=\"https://img.shields.io/github/stars/tl-open-source/tl-rtc-file?color=f2f08d&amp;logo=Undertale&amp;logoColor=eb4630\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>Forks</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/7e98d910cb54aeaacab40c02b475cd5f1148d28bc984483faeb63d4d0aa4c139/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f666f726b732f746c2d6f70656e2d736f757263652f746c2d7274632d66696c653f636f6c6f723d626138366562266c6f676f3d48616e647368616b65266c6f676f436f6c6f723d656136616136\" alt=\"forks\" data-canonical-src=\"https://img.shields.io/github/forks/tl-open-source/tl-rtc-file?color=ba86eb&amp;logo=Handshake&amp;logoColor=ea6aa6\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>License</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/7a599fb09f0161022c0b1a6cf2fac3bea2d318dfa5f0cff6573e22ac9120b534/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f746c2d6f70656e2d736f757263652f746c2d7274632d66696c653f6c6f676f3d64617461253341696d616765253246706e672533426261736536342532436956424f5277304b47676f414141414e53556845556741414144414141414177434159414141425841766d48414141414358424957584d41414173544141414c457745416d70775941414144336b6c45515652346e4f335953557a5555426748384a726f57567255474a66456d3773584e63534446784d544c327069347348456778654e526f77586770455742445552522532424e414e4f4b4f4b36366f6f4b4a4742586545475263574163455646475152484677516d483525324630774861655748493944554455354c356b6e6568644f62377a66652532423139636e434a47495243516945596c514237594a4979474c38616f73756c565a36695246516a69474b6b7564576735614c6c704f70704e586e665071773555304459524a6d56786a4367464633424c755a476d416f5655694b4541726d583744375553677351706f72674761336748664b34483663754262435644334771683141352532424c6745253242467749656e514d306a6f446f66714c6f48564e7742796d384370546e416d327a51713073676478624964515a556c416b7150415a3664676a303541446f59526f6f66792532466f5869726f376b3551586a4c6f70677a4b69514e6c4c4461716f4967754577426a7a7150355066446a45394479495879493633464d547751464d43567271774e61763451666f52673538514625324266724d485172454b3844546f434d714e4179574e4866786d54526f4c4f726d5352566747744466714345715a4f4851727a6f34706243557341333431365169364551394b476a6345465267484f724f4b6e5536574162396247455459656b4b7843766a546167394534706a653534446b3551503862624d4859762532464333756541654a6b50304f4778422532424a70426e4172595238455951516e6f4e31414e4661426e5050356c385372736559514c303641646b30464a5938484f5761424d6c6541486a683068506f73497a6c6f3876304125324633345a694f6548726130714b52504d5653493774762532423932747725324676687855654252713456454c674d376642714b354770526d6f514c584e7075625475367a6f4e52706754386e5051627138347764253246494375767978694b4871694e41664933774d367549684271476b4c696977414f734b44714f68743749747239567938536a52424557667941627225324668523142667056514664484a42253246423268683778376a36517077435665655951326b72554235436c636a3641326d3067576a25324244306d4c34397a573563517943484c4e37726a6c6d6d6174457958582532464372547a412532466f51785a6b576c39474a5443566f25324279546a3837253242346769504b6376307149486f344156344430565a727251493334706e70524d36357875652532467a417265453425324654253246536f676c664542794d7369517441546c4c3352414a355948725378365a44665337307337754d486842705225324659423573305057366f455270316236253246667252684b3353444c35546965364f515548516c5133735644752532427a50636b397657453973747225324236496a533967486d5750616861444a25324277434b364e494242587348423948796b587378774470686c436d416476706c6162554a4e6e5a504239342532464e7436784f6538587a4562503257684d335741673147756236744825324233513150673337365239713475716c6e6f36676448476a444f5139306562303141484d3672596975554a314f713472344656756a35765239427a4d3957674e764f7977446869495951467667626366774166774d764863615067425041253246447948476a50624e394138616d6562636477416444354e6633373574787165774e5552656f797677424958594c645170576c6877465771745061435044334173467541535636717171496c62304a766b564331464c39576b4c55556c55574b337a585a4c46432532423125324642726f46746f364f7358497545594a5034447a7a5732594656316f4a614141414141456c46546b5375516d4343\" alt=\"license\" data-canonical-src=\"https://img.shields.io/github/license/tl-open-source/tl-rtc-file?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD3klEQVR4nO3YSUzUUBgH8JroWVrUGJfEm7sXNcSDFxMTL2pi4sHEgxeNRowXgpEWBDURR%2BNANOKOK66ooKJGBXeEGRcWAcEVFGQRHFwQmH5%2F0wHaeWHI9DUDU5L5knehdOb7zfe%2B19cnCJGIRCQiEYlQB7YJIyGL8aosulVZ6iRFQjiGKkudWg5aLlpOppNXnfPqw5U0DYRJmVxjCgFF3BLuZGmAoVUiKEArmX7D7USgsQporgGa3gHfK4H6cuBbCVD3Gqh1A5%2BLgE%2BFwIenQM0joDofqLoHVNwBym8CpTnAm2zQq0sgdxbIdQZUlAkqPAZ6dgj05ADoYRoofy%2FoXiro7k5QXjLopgzKiQNlLDaqoIguEwBjzqP5PfDjE9DyIXyI63FMTwQFMCVrqwNav4QfoRg58QF%2BfrMHQrEK8DToCMqNAyWNHfxmTRoLOrmSRVgGtDfqCEqZOHQrzo4pbCUsA3416Qi6EQ9KGjcEFRgHOrOKnU6WAb9bGETYekKxCvjTag9E4pje54Dk5QP8bbMHYv%2FC3ueAeJkP0OGxB%2BJpBnArYR8EYQQnoN1ANFaBnPP5l8SrseYQL06Adk0FJY8HOWaBMleAHjh0hPosIzlo8v0A%2F34ZiOeHra0qKRPMVSI7tv%2B92tw%2FvhxUeBRq4VELgM7fBqK5GpRmoQLXNpubTu6zoNRpgT8nPQbq84wd%2FICuvyxiKHqiNAfI3wM6uIhBqGkLiiwAOsKDqOht7Itr9Vy8SjRBEWfyAbr%2FhR1BfpVQFdHJB%2FB2hh7x7j6QpwCVeeYQ2krUB5Clcj6A2m0gWj%2BD0mL49zW5cQyCHLN7rjlmmatEyXX%2FCrTzA%2FoQxZkWl9GJTCVo%2ByTj87%2B4giPKcv0qIHo4AV4D0VZrrQI34pnpRM65xue%2FzAreE4%2FT%2FSoglfEByMsiQtATlL3RAJ5YHrSx6ZDfS70s7uMHhBpR%2FYB5s0PW6oERp1b6%2FfrRhK3SDL5Tie6OQUHQlQ3sVDu%2BzPck9vWE9str%2B6IjS9gHmWPahaDJ%2BwCK6NIBBXsHB9HykXsxwDphlCmAdvplabUJNnZPB94%2FNt6xOe8XzEbP2WhM3WAg1Gub6tH%2B3Q1Pg376R9q4uqlno6gdHGjDOQ90eb01AHM6rYiuUJ1Oq4r4FVuj5vR9BzM9WgNvOywDhiIYQFvgbcfwAfwMvHcaPgBPA%2FDyHGjPbN9A8amebcdwAdD5Nf375txqewNUReoyvwBIXYLdQpWlhwFWqtPaCPD3AsFuASV6qqqIlb0JvkVC1FL9WkLUUlUWK3zXZLFC%2B1%2FBroFto6OsXIuEYJP4DzzW2YFV1oJaAAAAAElFTkSuQmCC\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>UpdatedAt</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/24ef280c3a54ce654d56e724bf68fc5302d5e5c089de3b69df08eddc346096f8/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f746c2d6f70656e2d736f757263652f746c2d7274632d66696c653f646973706c61795f74696d657374616d703d636f6d6d6974746572266c6f676f3d64617461253341696d616765253246706e672533426261736536342532436956424f5277304b47676f414141414e5355684555674141414234414141416543415941414141374d4b3669414141414358424957584d41414173544141414c457745416d7077594141414648556c45515652346e4c5658375539615678776d3236646c582532466468627825324232253246516e626b7655627264554151674a4a496655444e574454546d4f76314651554661504a346b7573725630314a7431734e70637453327533626f745a746d786439744a5346536f714b71494635625944464c436f76436c656673747a4a387758524c445a4c7a6e6b634f343535376e3364332532466e655a3472454f515a74315771462532423858467234253242664f4c4565326a6f59307a776638546f795a50766a45676b4c592532426b306d6d72584f36644b696e787a476b30666a5430782532425279723055716e6359637a4d317263347451253242497270324c4758646f344e4334567657715453373277716c632532427231334f527269364b6458646e624f484c6c776c7a4a70524b6e3657342532424b36706f4f434e6e494166486a253246253242776168495a4234764b6e715a6630714a704e49716c2532467638545530634e6c3572627963337730516e54703379324c54614a374d314e617844723266526e315370504736476961323174664533345463614f617931694d55564f5146624659714957536f31573854694156616e43306576584f4542375770313448466232327a453566714c4f433545524c515769644e614e49347545636339693768634a6c644868324e57725135674464624f6c7061756d49754c62326174415144506e7a3062384e6257636d785656524a33486d7870536377777a4f4a6d4b44524765384c6c435a444c4739673754496e5631516c376462586256316533675430574b697243466f6d6b5079767758466c5a474a4f6a563625324253743634757564445a4f55354555636f782532464d455144567674364d62634e3237593341797a687633737061557242365a3971724a534f3139657a6a387032704c426b4a792532426343484a7857493567573574636652527a31645531394766476b6f7539505a4f34736d52396a4746777065783444793362766e6d4b79706f74625531335669646a71595a68726a343972764d457425324625324659714c7a396430304e6a57253246637a67796f394f35317a7336614e6c6f354644747530445a675146686c47584a30644241446f4e6864367576703657686f617967374e394c564748386d443462253246486e667455516f4e4734764c51306769784d716c5725324234714f6a744e48446733723166365969525347785279375576714c62395534716b716e78504f4e7661356c447048723125324279794b524e4b57425a793565644d554842326d3572792532422532424551772532427a6766347a6f39253246306f634e3357527a4c4277344a2532424a7950574372716d4967475974554f735744346f785a46516f50556a4770564871493425324661666b51504336665a5165654d31253242764c7549516e6a754257514444437363726d485039656f4e5041744271664f6e5875614b25324268364a45624772732532427076764d6d78654962683836336162565065597953456f39464a48704e4d464a59253242503563575a6b6667374f3174537759436553514c54593345385130392532464256504a556c78516a7368543142736343593032723955445542667643484236367063665041336c794165336e6772332532463437584467614a7a736c7937787741364e5a746c555550437541487161536a5549502532427375653842525741432532464e6651374a5a505a35397330476a3756747049537a34685125324243706658474d4b685a63764c70554b7866574d386f68766637702532464f446a4842666356463849736b383267314648796b63564645253242555a414158343761452532464d6c34504f3530506e75683025324678346e6d637957507364774468427836436d6b4c562532466746446a594b784f4a4f4674623077517949684c39527943774b33414f664947703159464542686e4d4a634c525745624b644b516f55366e63545a6b494544696341792532463831645675454d3552775066657934784f7830496b25324649324e6e466b692532425761664f6f464959466367595a43797864376543556a626334416d46363566742532466b4d686b336f25324235686337734d4a79716a4a45477659466151464972375930775077384246415925324236253242766d6b3377367a7a5275444d6d5a5652736668385274413075455453443775434254364459514e36697665553066706b594c6a453671725672744f78654e4b553954484c5a4a396b4255324a427342685635416976422532466f4b61514e4b675043427744596149665a4334616454684f71463457454e56694c4a77566f586f62664c424b56773637414f6154734c6336355461564b32317651344c613939654b6359673576627873624f627a5451394e37554b4467554f3177446a6944494942736868357a746733396e514d4c535a4248344f7a424f55444551586d323036643366634c67737762585141345068634b336e6873775531427a3877765130395248472532466f597933656a6677424e6d746f59714c4130586741414141424a52553545726b4a676767253344253344266c6162656c3d557064617465644174\" alt=\"last-commit\" data-canonical-src=\"https://img.shields.io/github/last-commit/tl-open-source/tl-rtc-file?display_timestamp=committer&amp;logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFHUlEQVR4nLVX7U9aVxwm26dlX%2Fdhbx%2B2%2FQnbkvUbrdUAQgJJIfUDNWDTTmOv1FQUFaPJ4kusrV01Jt1sNpctS2u3botZtmxd9tJSFSoqKqIF5bYDFLCovClefstzJ8wXRLDZLznkcO4557n3d3%2FneZ4rEOQZt1WqF%2B8XFr4%2BfOLEe2joY0zwf8ToyZPvjEgkLY%2Bk0mmrXO6dKinxzGk0fjT0x%2BRyr0UqncYczM1rc4tQ%2BIrp2LGXdo4NC4VvWqTS72wqlc%2Br13ORri6KdXdnbOHLlwlzJpRKn6W4%2BK6poOCNnIAfHj%2F%2BwahIZB4vKnqZf0qJpNIql%2Fv8TU0cNl5rbyc3w0QnTp3y2LTaJ7M1NaxDr2fRn1SpPG6Gia21tfE34TcaOay1iMUVOQFbFYqIWSo1W8TiAVanC0evXOEB7Wp14HFb22zE5fqLOC5ERLQWidNaNI4uEcc9i7hcJldHh2NWrQ5gDdbOlpaumIuLb2atAQDPnz0b8NbWcmxVVRJ3HmxpScwwzOJmKDRGe8LlCZDLG9g7TInV1Ql7dbXbV1e3gT0WKirCFomkPyvwXFlZGJOjV6%2BSt64uudDZOU5EUcox%2FMEQDVvt6MbcN27Y3Ayzhv3spaUrB6Z9qrJSO19ezj8p2pLBkJy%2BcCHJxWI5gW5tcfRRz1dU19GfGkou9PZO4smR9jGFwpex4Dy3bvnmKypotbU13VidjqYZhrj49rvMEt%2F%2FYqLz9d00NjW%2Fczgyo9O51zs6aNlo5FDtu0DZgQFhlGXJ0dBADoNhd6uvp6Whoayg7N9LVGH8mD4b%2FHnftUQoNG4vLQ0gixMqlW%2B4qOjtNHDg3r1f6YiRSGxRy7UvqLb9U4qkqnxPONva5lDpHr1%2ByyKRNKWBZy5edMUHB2m5ry%2B%2BEQw%2Bzgf4zo9%2F0ocN3WRzLBw4J%2BJyPWCrqmIgGYtUOsWD4oxZFQoPUjGpVHqI4%2FafkQPC6fZQeeM1%2BvLuIQnjuBWQDDCscrmHP9eoNPAtBqfOnXuaK%2Bh6JEbGrs%2BpvvMmxeIbh863abVPeYySEo9FJHpNMFJY%2BP5cWZkfg7O1tSwYCeSQLTY3E8Q09%2FBVPJUlxQjshT1BscCY02r9UDUBfvCHB66pcfPA3lyAe3ngr3%2F47XDgaJzsly7xwA6NZtlUUPCuAHqaSjUIP%2Bsue8BRWAC%2FNfQ7JZPZ59s0Gj7VtpISz4hQ%2BCpfXGMKhZcvLpUKxfWM8ohvf7p%2FODjHBfcVF8Isk82g1FHykcVFE%2BUZAAX47aE%2FMl4PO50Pnuh0%2Fx4nmcyWPsdwDhBx6CmkLV%2FgFDjYKxOJOFtb0wQyIhL9RyCwK3AOfIGp1YFEBhnMJcLRWEbKdKQoU6ncTZkIEDicAy%2F81dVuEM5RwPfey4xOx0Ik%2FI2NnFki%2BWafOoFIYFcgYZCyxd7eCUjbc4AmF65ft%2FkMhk3o%2B5hc7sMJyqjJEGvYFaQFIr7Y0wPw8BFAY%2B6%2Bvmk3w6zzRuDMmZVRsfh8RtA0uETSD7uCBT6DYQN6iveU0fpkYLjE6qrVrtOxeNKU9THLZJ9kBU2JBsBhV5AivB%2FoKaQNKgPCBwDYaIfZC4adThOqF4WENViLJwVoXobfLBKVw67AOaTsLc65TaVK21vQ4La99eKcYg5vbxsbObzTQ9N7UKDgUO1wDjiDIIBshh5ztg39nQMLSZBH4OzBOUDEQXm206d3fcLgswbXQA4PhcK3nhswU1Bz8wvQ09RHG%2FoYy3ejfwBNmtoYqLA0XgAAAABJRU5ErkJggg%3D%3D&amp;label=UpdatedAt\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>CreatedAt</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/d602658902d257fe9fe09e155362d6c4607be53f036350bd26f8ac65ac022051/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f637265617465642d61742f746c2d6f70656e2d736f757263652f746c2d7274632d66696c653f6c6f676f3d64617461253341696d616765253246706e672533426261736536342532436956424f5277304b47676f414141414e5355684555674141414234414141416543415941414141374d4b3669414141414358424957584d41414173544141414c457745416d7077594141414648556c45515652346e4c5658375539615678776d3236646c582532466468627825324232253246516e626b7655627264554151674a4a496655444e574454546d4f76314651554661504a346b7573725630314a7431734e70637453327533626f745a746d786439744a5346536f714b71494635625944464c436f76436c656673747a4a387758524c445a4c7a6e6b634f343535376e3364332532466e655a3472454f515a74315771462532423858467234253242664f4c4565326a6f59307a776638546f795a50766a45676b4c592532426b306d6d72584f36644b696e787a476b30666a5430782532425279723055716e6359637a4d317263347451253242497270324c4758646f344e4334567657715453373277716c632532427231334f527269364b6458646e624f484c6c776c7a4a70524b6e3657342532424b36706f4f434e6e494166486a253246253242776168495a4234764b6e715a6630714a704e49716c2532467638545530634e6c3572627963337730516e54703379324c54614a374d314e617844723266526e315370504736476961323174664533345463614f617931694d55564f5146624659714957536f31573854694156616e43306576584f4542375770313448466232327a453566714c4f433545524c515769644e614e49347545636339693768634a6c644868324e57725135674464624f6c7061756d49754c62326174415144506e7a3062384e6257636d785656524a33486d7870536377777a4f4a6d4b44524765384c6c435a444c4739673754496e5631516c376462586256316533675430574b697243466f6d6b5079767758466c5a474a4f6a563625324253743634757564445a4f55354555636f782532464d455144567674364d62634e3237593341797a687633737061557242365a3971724a534f3139657a6a387032704c426b4a792532426343484a7857493567573574636652527a31645531394766476b6f7539505a4f34736d52396a4746777065783444793362766e6d4b79706f74625531335669646a71595a68726a343972764d457425324625324659714c7a396430304e6a57253246637a67796f394f35317a7336614e6c6f354644747530445a675146686c47584a30644241446f4e6864367576703657686f617967374e394c564748386d443462253246486e667455516f4e4734764c51306769784d716c5725324234714f6a744e48446733723166365969525347785279375576714c62395534716b716e78504f4e7661356c447048723125324279794b524e4b57425a793565644d554842326d3572792532422532424551772532427a6766347a6f39253246306f634e3357527a4c4277344a2532424a7950574372716d4967475974554f735744346f785a46516f50556a4770564871493425324661666b51504336665a5165654d31253242764c7549516e6a754257514444437363726d485039656f4e5041744271664f6e5875614b25324268364a45624772732532427076764d6d78654962683836336162565065597953456f39464a48704e4d464a59253242503563575a6b6667374f3174537759436553514c54593345385130392532464256504a556c78516a7368543142736343593032723955445542667643484236367063665041336c794165336e6772332532463437584467614a7a736c7937787741364e5a746c555550437541487161536a5549502532427375653842525741432532464e6651374a5a505a35397330476a3756747049537a34685125324243706658474d4b685a63764c70554b7866574d386f68766637702532464f446a4842666356463849736b383267314648796b63564645253242555a414158343761452532464d6c34504f3530506e75683025324678346e6d637957507364774468427836436d6b4c562532466746446a594b784f4a4f4674623077517949684c39527943774b33414f664947703159464542686e4d4a634c525745624b644b516f55366e63545a6b494544696341792532463831645675454d3552775066657934784f7830496b25324649324e6e466b692532425761664f6f464959466367595a43797864376543556a626334416d46363566742532466b4d686b336f25324235686337734d4a79716a4a45477659466151464972375930775077384246415925324236253242766d6b3377367a7a5275444d6d5a5652736668385274413075455453443775434254364459514e36697665553066706b594c6a453671725672744f78654e4b553954484c5a4a396b4255324a427342685635416976422532466f4b61514e4b675043427744596149665a4334616454684f71463457454e56694c4a77566f586f62664c424b56773637414f6154734c6336355461564b32317651344c613939654b6359673576627873624f627a5451394e37554b4467554f3177446a6944494942736868357a746733396e514d4c535a4248344f7a424f55444551586d323036643366634c67737762585141345068634b336e6873775531427a3877765130395248472532466f597933656a6677424e6d746f59714c4130586741414141424a52553545726b4a676767253344253344266c6162656c3d437265617465644174\" alt=\"create-at\" data-canonical-src=\"https://img.shields.io/github/created-at/tl-open-source/tl-rtc-file?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFHUlEQVR4nLVX7U9aVxwm26dlX%2Fdhbx%2B2%2FQnbkvUbrdUAQgJJIfUDNWDTTmOv1FQUFaPJ4kusrV01Jt1sNpctS2u3botZtmxd9tJSFSoqKqIF5bYDFLCovClefstzJ8wXRLDZLznkcO4557n3d3%2FneZ4rEOQZt1WqF%2B8XFr4%2BfOLEe2joY0zwf8ToyZPvjEgkLY%2Bk0mmrXO6dKinxzGk0fjT0x%2BRyr0UqncYczM1rc4tQ%2BIrp2LGXdo4NC4VvWqTS72wqlc%2Br13ORri6KdXdnbOHLlwlzJpRKn6W4%2BK6poOCNnIAfHj%2F%2BwahIZB4vKnqZf0qJpNIql%2Fv8TU0cNl5rbyc3w0QnTp3y2LTaJ7M1NaxDr2fRn1SpPG6Gia21tfE34TcaOay1iMUVOQFbFYqIWSo1W8TiAVanC0evXOEB7Wp14HFb22zE5fqLOC5ERLQWidNaNI4uEcc9i7hcJldHh2NWrQ5gDdbOlpaumIuLb2atAQDPnz0b8NbWcmxVVRJ3HmxpScwwzOJmKDRGe8LlCZDLG9g7TInV1Ql7dbXbV1e3gT0WKirCFomkPyvwXFlZGJOjV6%2BSt64uudDZOU5EUcox%2FMEQDVvt6MbcN27Y3Ayzhv3spaUrB6Z9qrJSO19ezj8p2pLBkJy%2BcCHJxWI5gW5tcfRRz1dU19GfGkou9PZO4smR9jGFwpex4Dy3bvnmKypotbU13VidjqYZhrj49rvMEt%2F%2FYqLz9d00NjW%2Fczgyo9O51zs6aNlo5FDtu0DZgQFhlGXJ0dBADoNhd6uvp6Whoayg7N9LVGH8mD4b%2FHnftUQoNG4vLQ0gixMqlW%2B4qOjtNHDg3r1f6YiRSGxRy7UvqLb9U4qkqnxPONva5lDpHr1%2ByyKRNKWBZy5edMUHB2m5ry%2B%2BEQw%2Bzgf4zo9%2F0ocN3WRzLBw4J%2BJyPWCrqmIgGYtUOsWD4oxZFQoPUjGpVHqI4%2FafkQPC6fZQeeM1%2BvLuIQnjuBWQDDCscrmHP9eoNPAtBqfOnXuaK%2Bh6JEbGrs%2BpvvMmxeIbh863abVPeYySEo9FJHpNMFJY%2BP5cWZkfg7O1tSwYCeSQLTY3E8Q09%2FBVPJUlxQjshT1BscCY02r9UDUBfvCHB66pcfPA3lyAe3ngr3%2F47XDgaJzsly7xwA6NZtlUUPCuAHqaSjUIP%2Bsue8BRWAC%2FNfQ7JZPZ59s0Gj7VtpISz4hQ%2BCpfXGMKhZcvLpUKxfWM8ohvf7p%2FODjHBfcVF8Isk82g1FHykcVFE%2BUZAAX47aE%2FMl4PO50Pnuh0%2Fx4nmcyWPsdwDhBx6CmkLV%2FgFDjYKxOJOFtb0wQyIhL9RyCwK3AOfIGp1YFEBhnMJcLRWEbKdKQoU6ncTZkIEDicAy%2F81dVuEM5RwPfey4xOx0Ik%2FI2NnFki%2BWafOoFIYFcgYZCyxd7eCUjbc4AmF65ft%2FkMhk3o%2B5hc7sMJyqjJEGvYFaQFIr7Y0wPw8BFAY%2B6%2Bvmk3w6zzRuDMmZVRsfh8RtA0uETSD7uCBT6DYQN6iveU0fpkYLjE6qrVrtOxeNKU9THLZJ9kBU2JBsBhV5AivB%2FoKaQNKgPCBwDYaIfZC4adThOqF4WENViLJwVoXobfLBKVw67AOaTsLc65TaVK21vQ4La99eKcYg5vbxsbObzTQ9N7UKDgUO1wDjiDIIBshh5ztg39nQMLSZBH4OzBOUDEQXm206d3fcLgswbXQA4PhcK3nhswU1Bz8wvQ09RHG%2FoYy3ejfwBNmtoYqLA0XgAAAABJRU5ErkJggg%3D%3D&amp;label=CreatedAt\" style=\"max-width: 100%;\"></a></td>\n</tr>\n</tbody>\n</table></markdown-accessiblity-table>\n<a href=\"https://github.com/opsre/awesome-ops\">\n</a><p dir=\"auto\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/b964a36ea4078c39f603d46a29436371c7541a2f26e0228d7b21b9d9805b43d3/68747470733a2f2f736f6369616c6966792e6769742e63692f6f707372652f617765736f6d652d6f70732f696d6167653f6465736372697074696f6e3d3126666f6e743d42697474657226666f726b733d31266973737565733d31266c616e67756167653d31266c6f676f3d6874747073253341253246253246617661746172732e67697468756275736572636f6e74656e742e636f6d25324675253246313838353638303230266e616d653d31266f776e65723d31267061747465726e3d436972637569742b426f6172642670756c6c733d31267374617267617a6572733d31267468656d653d4c69676874\" alt=\"\" data-canonical-src=\"https://socialify.git.ci/opsre/awesome-ops/image?description=1&amp;font=Bitter&amp;forks=1&amp;issues=1&amp;language=1&amp;logo=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F188568020&amp;name=1&amp;owner=1&amp;pattern=Circuit+Board&amp;pulls=1&amp;stargazers=1&amp;theme=Light\" style=\"max-width: 100%;\"></a></p>\n<a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\"><img src=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\" width=\"100%\" height=\"3\" data-animated-image=\"\" data-canonical-src=\"https://cdn.jsdelivr.net/gh/eryajf/tu@main/img/image_20240420_214408.gif\" style=\"max-width: 100%; height: auto; max-height: 3px;\"></a>\n</div>\n<h1 dir=\"auto\">tl-rtc-file-tool (tl webrtc file(media) tools)</h1>\n<p dir=\"auto\"><a href=\"https://webrtc.org.cn/\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/327f25f245196c0211f696ef8fb3f34ec939cabf5ed7dbd6f5e79b50f4c900fe/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7765627274632d7032702d626c7565\" alt=\"\" data-canonical-src=\"https://img.shields.io/badge/webrtc-p2p-blue\" style=\"max-width: 100%;\"></a><br>\n<a href=\"https://github.com/iamtsm/tl-rtc-file/\"><img src=\"https://camo.githubusercontent.com/8d415e36cc53ba3fc4d0ac3f830b36fae41d9759a298ab91503692ecb5edd7fa/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f64652d73696d706c652d677265656e\" alt=\"\" data-canonical-src=\"https://img.shields.io/badge/code-simple-green\" style=\"max-width: 100%;\"></a><br>\n<a href=\"https://github.com/iamtsm/tl-rtc-file/\"><img src=\"https://camo.githubusercontent.com/dda5d2c21f5e344f958ff7614e4a09dab521874b37c2b2b74d061d7a935daec1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6172676525323066696c652d737570706f72742d677265656e\" alt=\"\" data-canonical-src=\"https://img.shields.io/badge/large%20file-support-green\" style=\"max-width: 100%;\"></a><br>\n<a href=\"https://github.com/iamtsm/tl-rtc-file/\"><img src=\"https://camo.githubusercontent.com/080e6fe2e7ef80ee39916657bd6617d0ff2f2f39b7bf9caa42bf64e03d7e82ad/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6465706c6f796d656e742d707269766174652d79656c6c6f77\" alt=\"\" data-canonical-src=\"https://img.shields.io/badge/deployment-private-yellow\" style=\"max-width: 100%;\"></a><br>\n<a href=\"https://github.com/iamtsm/tl-rtc-file/\"><img src=\"https://camo.githubusercontent.com/20ea7264b89ed579c7900fa92f89681afbb3844c77c5d1eddf231e611442c0da/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f706c6174666f726d2d756e6c696d697465642d636f72616c\" alt=\"\" data-canonical-src=\"https://img.shields.io/badge/platform-unlimited-coral\" style=\"max-width: 100%;\"></a></p>\n<p align=\"center\" dir=\"auto\">\n<a href=\"https://im.iamtsm.cn/file\" rel=\"nofollow\">Demo</a> ｜\n<a href=\"https://im.iamtsm.cn/document\" rel=\"nofollow\">Document</a> ｜\n<a href=\"https://hub.docker.com/u/iamtsm\" rel=\"nofollow\">DockerHub</a> ｜\n<a href=\"https://github.com/tl-open-source/tl-rtc-file/blob/master/doc/README_ZN.md\">中文文档</a> ｜ QQ Group:\n<a href=\"https://jq.qq.com/?_wv=1027&amp;k=TKCwMBjN\" rel=\"nofollow\">624214498</a>\n</p>\n<h2 dir=\"auto\">Table of Contents</h2>\n<ul dir=\"auto\">\n<li><a href=\"#background\">Background</a></li>\n<li><a href=\"#advantages\">Advantages</a></li>\n<li><a href=\"#pre-deployment-considerations\">Pre-deployment Considerations</a></li>\n<li><a href=\"#self-deployment\">Self-Deployment</a>\n<ul dir=\"auto\">\n<li><a href=\"#installing-dependencies\">Installing Dependencies</a></li>\n<li><a href=\"#starting-the-service\">Starting the Service</a></li>\n</ul>\n</li>\n<li><a href=\"#docker-deployment\">Docker Deployment</a>\n<ul dir=\"auto\">\n<li><a href=\"#one-click-docker-script\">One-Click Docker Script</a></li>\n<li><a href=\"#using-docker-compose\">Using docker-compose</a></li>\n<li><a href=\"#self-building-and-starting-the-image\">Self-Building and Starting the Image</a></li>\n</ul>\n</li>\n<li><a href=\"#other-deployment-methods\">Other Deployment Methods</a></li>\n<li><a href=\"#configuring-the-database-optional\">Configuring the Database (Optional)</a></li>\n<li><a href=\"#admin-panel-optional\">Admin Panel (Optional)</a></li>\n<li><a href=\"#wechat-notifications-optional\">WeChat Notifications (Optional)</a></li>\n<li><a href=\"#oss-cloud-storage-optional\">OSS Cloud Storage (Optional)</a></li>\n<li><a href=\"#chat-gpt-optional\">Chat-GPT (Optional)</a></li>\n<li><a href=\"#configuring-turnserver-optional-for-lan-required-for-wan\">Configuring turnserver (Optional for LAN, Required for WAN)</a></li>\n<li><a href=\"#overview-diagram\">Overview Diagram</a></li>\n<li><a href=\"#license\">License</a></li>\n<li><a href=\"#disclaimer\">Disclaimer</a></li>\n</ul>\n<h2 dir=\"auto\">Background</h2>\n<p dir=\"auto\">This project was developed based on the topic of the graduation project in 2020. It allows file transfer using WebRTC in web applications and supports transferring large files.</p>\n<h2 dir=\"auto\">Advantages</h2>\n<p dir=\"auto\">Fragmented transmission, cross-platform, platform-independent, easy to use, no speed limit in the local network (up to over 70 MB/s in the LAN), supports private deployment, supports drag-and-drop sending of multiple files, web file preview. Many additional features have been added, such as local screen recording, remote screen sharing (zero-latency), remote audio and video calls (zero-latency), live streaming (zero-latency), password-protected rooms, OSS cloud storage, relay service settings, WebRTC detection, WebRTC statistics, text transmission (group chat, private chat), public chat, remote whiteboard, AI chatbox, feature-rich admin panel, real-time execution log display, robot alert notifications, and more.</p>\n<h2 dir=\"auto\">Pre-deployment Considerations</h2>\n<p dir=\"auto\">Whether it's self-deployment, Docker deployment, or other script deployments, you need to modify the corresponding configurations in <code class=\"notranslate\">tlrtcfile.env</code> before performing the following operations. Further configuration modifications and service restarts are required.</p>\n<p dir=\"auto\">Of course, you can also use the default configurations without modifications, but the default configurations are only suitable for testing on localhost. They won't be accessible to others, making it impossible for others to use. Therefore, if you intend to deploy on a server for local network or public network users, you must configure <code class=\"notranslate\">tlrtcfile.env</code> accordingly.</p>\n<h2 dir=\"auto\">Self-Deployment</h2>\n<h4 dir=\"auto\">Installing Dependencies</h4>\n<p dir=\"auto\">Install Node.js 14.21.x or above, and npm. Then, navigate to the project directory and run the following command:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"cd svr/\n\nnpm install\"><pre class=\"notranslate\"><code class=\"notranslate\">cd svr/\n\nnpm install\n</code></pre></div>\n<p dir=\"auto\">For the first run, execute the following command:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"npm run build:pro\"><pre class=\"notranslate\"><code class=\"notranslate\">npm run build:pro\n</code></pre></div>\n<p dir=\"auto\">If you need to develop or modify the frontend pages, use this command. If not, you can skip this step:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"npm run build:dev\"><pre class=\"notranslate\"><code class=\"notranslate\">npm run build:dev\n</code></pre></div>\n<h4 dir=\"auto\">Starting the Service</h4>\n<p dir=\"auto\">Start the following two services. Choose one mode to start. The only difference between them is that the HTTPS mode is required to use features like audio/video streaming, live streaming, and screen sharing. Other features are not affected.</p>\n<p dir=\"auto\">After starting in HTTP mode, access the service at <code class=\"notranslate\">http://your_machine_ip:9092</code>.</p>\n<ul dir=\"auto\">\n<li>Start the API and socket services:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"npm run http-api\nnpm run http-socket\"><pre class=\"notranslate\"><code class=\"notranslate\">npm run http-api\nnpm run http-socket\n</code></pre></div>\n<p dir=\"auto\">Or, start in HTTPS mode and access the service at <code class=\"notranslate\">https://your_machine_ip:9092</code>.</p>\n<ul dir=\"auto\">\n<li>Start the API and socket services:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"npm run https-api\nnpm run https-socket\"><pre class=\"notranslate\"><code class=\"notranslate\">npm run https-api\nnpm run https-socket\n</code></pre></div>\n<h2 dir=\"auto\">Docker Deployment</h2>\n<p dir=\"auto\">Currently, both <code class=\"notranslate\">official images</code> and <code class=\"notranslate\">self-built images</code> are supported. For official images, there are two ways to operate: <code class=\"notranslate\">docker script startup</code> and <code class=\"notranslate\">docker-compose startup</code>.</p>\n<h4 dir=\"auto\">One-Click Docker Script</h4>\n<p dir=\"auto\">Navigate to the <code class=\"notranslate\">bin/</code> directory and execute the <code class=\"notranslate\">auto-pull-and-start-docker.sh</code> script:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"chmod +x ./auto-pull-and-start-docker.sh\n./auto-pull-and-start-docker.sh\"><pre class=\"notranslate\"><code class=\"notranslate\">chmod +x ./auto-pull-and-start-docker.sh\n./auto-pull-and-start-docker.sh\n</code></pre></div>\n<h4 dir=\"auto\">Using docker-compose</h4>\n<p dir=\"auto\">In the main directory, execute the corresponding command based on your Docker Compose version:</p>\n<ul dir=\"auto\">\n<li>For Docker Compose V1:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"docker-compose --profile=http up -d\"><pre class=\"notranslate\"><code class=\"notranslate\">docker-compose --profile=http up -d\n</code></pre></div>\n<ul dir=\"auto\">\n<li>For Docker Compose V2:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"docker compose --profile=http up -d\"><pre class=\"notranslate\"><code class=\"notranslate\">docker compose --profile=http up -d\n</code></pre></div>\n<h4 dir=\"auto\">Self-Building and Starting the Image</h4>\n<p dir=\"auto\">Navigate to the <code class=\"notranslate\">docker/</code> directory and execute the corresponding command based on your Docker Compose version:</p>\n<ul dir=\"auto\">\n<li>For Docker Compose V1:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"docker-compose -f docker-compose-build-code.yml up -d\"><pre class=\"notranslate\"><code class=\"notranslate\">docker-compose -f docker-compose-build-code.yml up -d\n</code></pre></div>\n<ul dir=\"auto\">\n<li>For Docker Compose V2:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"docker compose -f docker-compose-build-code.yml up -d\"><pre class=\"notranslate\"><code class=\"notranslate\">docker compose -f docker-compose-build-code.yml up -d\n</code></pre></div>\n<h2 dir=\"auto\">Other Deployment Methods</h2>\n<p dir=\"auto\">In addition to the manual installation, Docker official images, and self-built Docker images, there are other methods such as automatic scripts and one-click deployments on hosting platforms.</p>\n<p dir=\"auto\">After downloading the project, navigate to the <code class=\"notranslate\">bin/</code> directory and choose the appropriate system script to execute. It will automatically detect the environment, install dependencies, and start the service.</p>\n<h4 dir=\"auto\">Automatic script for Ubuntu (e.g., Ubuntu 16)</h4>\n<ul dir=\"auto\">\n<li>If the script doesn't have execution permission, run the following command:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"chmod +x ./ubuntu16/*.sh\"><pre class=\"notranslate\"><code class=\"notranslate\">chmod +x ./ubuntu16/*.sh\n</code></pre></div>\n<ul dir=\"auto\">\n<li>If using HTTP, execute this script:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"./auto-check-install-http.sh\"><pre class=\"notranslate\"><code class=\"notranslate\">./auto-check-install-http.sh\n</code></pre></div>\n<ul dir=\"auto\">\n<li>If using HTTPS, execute this script:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"./auto-check-install-https.sh\"><pre class=\"notranslate\"><code class=\"notranslate\">./auto-check-install-https.sh\n</code></pre></div>\n<ul dir=\"auto\">\n<li>To stop the service:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"./auto-stop.sh\"><pre class=\"notranslate\"><code class=\"notranslate\">./auto-stop.sh\n</code></pre></div>\n<h4 dir=\"auto\">Automatic script for Windows</h4>\n<ul dir=\"auto\">\n<li>If using HTTP, execute this script:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"windows/auto-check-install-http.bat\"><pre class=\"notranslate\"><code class=\"notranslate\">windows/auto-check-install-http.bat\n</code></pre></div>\n<ul dir=\"auto\">\n<li>If using HTTPS, execute this script:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"windows/auto-check-install-https.bat\"><pre class=\"notranslate\"><code class=\"notranslate\">windows/auto-check-install-https.bat\n</code></pre></div>\n<h4 dir=\"auto\">One-Click Deployment on Zeabur Platform</h4>\n<p dir=\"auto\"><a href=\"https://zeabur.com/templates/898TLE?referralCode=iamtsm\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/34df6b95f619465d16570ca8dd4d5a2aae99f4211d5de6d77bda8cfe5eba10f5/68747470733a2f2f7a65616275722e636f6d2f627574746f6e2e737667\" alt=\"Deploy on Zeabur\" data-canonical-src=\"https://zeabur.com/button.svg\" style=\"max-width: 100%;\"></a></p>\n<h2 dir=\"auto\">Other Configuration Options</h2>\n<h4 dir=\"auto\">Configuring the Database (Optional)</h4>\n<p dir=\"auto\">You need to install MySQL database manually, create a database named <code class=\"notranslate\">webchat</code>, and then modify the database-related configurations in <code class=\"notranslate\">tlrtcfile.env</code>.</p>\n<h4 dir=\"auto\">Admin Panel (Optional)</h4>\n<p dir=\"auto\">Prerequisite: Database configuration must be enabled.</p>\n<p dir=\"auto\">Modify the admin panel-related configurations in <code class=\"notranslate\">tlrtcfile.env</code>. After starting, enter the configured room number and password to access the admin panel.</p>\n<h4 dir=\"auto\">WeChat Notifications (Optional)</h4>\n<p dir=\"auto\">If you need to set up notification for access and error alerts, you can create a WeChat Work robot and get an API key. Modify the WeChat notification configurations in <code class=\"notranslate\">tlrtcfile.env</code>.</p>\n<h4 dir=\"auto\">OSS Cloud Storage (Optional)</h4>\n<p dir=\"auto\">The project currently supports Seafile storage integration, and future updates will include support for Alibaba Cloud, Tencent Cloud, Qiniu Cloud, and self-hosted server storage methods. Modify the OSS storage configurations in <code class=\"notranslate\">tlrtcfile.env</code>.</p>\n<h4 dir=\"auto\">Chat-GPT (Optional)</h4>\n<p dir=\"auto\">Integrated with the OpenAI API, this project includes a chat dialog. Modify the OpenAI configurations in <code class=\"notranslate\">tlrtcfile.env</code>.</p>\n<h4 dir=\"auto\">Configuring turnserver (Optional for LAN, Required for WAN)</h4>\n<p dir=\"auto\">There are two ways to generate TURN server credentials: fixed credentials (recommended) and time-limited credentials. Choose one method. The following example uses Ubuntu.</p>\n<p dir=\"auto\">Install coturn:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"sudo apt-get install coturn\"><pre class=\"notranslate\"><code class=\"notranslate\">sudo apt-get install coturn\n</code></pre></div>\n<p dir=\"auto\">For time-limited credentials, modify the configuration file <code class=\"notranslate\">docker/coturn/turnserver-with-secret-user.conf</code>.</p>\n<ul dir=\"auto\">\n<li>Modify the fields in the configuration file:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"`listening-device`, `listening-ip`, `external-ip`, `static-auth-secret`, `realm`\"><pre class=\"notranslate\"><code class=\"notranslate\">`listening-device`, `listening-ip`, `external-ip`, `static-auth-secret`, `realm`\n</code></pre></div>\n<ul dir=\"auto\">\n<li>Start the turnserver:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"turnserver -c /path/to/conf/turn/turnserver-with-secret-user.conf\"><pre class=\"notranslate\"><code class=\"notranslate\">turnserver -c /path/to/conf/turn/turnserver-with-secret-user.conf\n</code></pre></div>\n<p dir=\"auto\">For fixed credentials, modify the configuration file <code class=\"notranslate\">docker/coturn/turnserver-with-fixed-user.conf</code>.</p>\n<ul dir=\"auto\">\n<li>Modify the fields in the configuration file:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"`listening-device`, `listening-ip`, `external-ip`, `user`, `realm`\"><pre class=\"notranslate\"><code class=\"notranslate\">`listening-device`, `listening-ip`, `external-ip`, `user`, `realm`\n</code></pre></div>\n<ul dir=\"auto\">\n<li>Generate a user:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"turnadmin -a -u username -p password -r realm_in_config_file\"><pre class=\"notranslate\"><code class=\"notranslate\">turnadmin -a -u username -p password -r realm_in_config_file\n</code></pre></div>\n<ul dir=\"auto\">\n<li>Start the turnserver:</li>\n</ul>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"turnserver -c /path/to/docker/coturn/turnserver-with-secret-user.conf\"><pre class=\"notranslate\"><code class=\"notranslate\">turnserver -c /path/to/docker/coturn/turnserver-with-secret-user.conf\n</code></pre></div>\n<p dir=\"auto\">After setting up coturn, configure the WebRTC-related information in the corresponding <code class=\"notranslate\">tlrtcfile.env</code> configuration.</p>\n<h2 dir=\"auto\">Overview Diagram</h2>\n<p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"doc/tl-rtc-file-tool.jpg\"><img src=\"doc/tl-rtc-file-tool.jpg\" alt=\"image\" style=\"max-width: 100%;\"></a></p>\n<h2 dir=\"auto\">License</h2>\n<h3 dir=\"auto\">MIT License Copyright (c) 2020 ~ 2023 iamtsm</h3>\n<h2 dir=\"auto\">Disclaimer</h2>\n<p dir=\"auto\"><a href=\"DISCLAIMER.md\">Disclaimer</a></p>","updatedAt":"2025-05-22T01:51:10Z","upvoteCount":null,"author":{"login":"eryajf","avatarUrl":"https://avatars.githubusercontent.com/u/33259379?u=e4a4090a38ac2473aaed4ef9945233636776c6c3&v=4","url":"https://github.com/eryajf"},"category":null,"labels":{"edges":[{"node":{"name":"更多","color":"25B472"}},{"node":{"name":"文件管理系统","color":"0eb870"}},{"node":{"name":"tl-open-source","color":"2216bb"}}]},"comments":{"edges":[]}}},"pageContext":{"number":568,"previous":{"title":"tl-open-source/tl-ops-manage: 基于 OpenResty 的 API 网关，支持负载均衡，健康检查，服务熔断，服务限流，WAF 过滤，黑白名单，动态 SSL 证书，自定义插件，多级缓存，可视化管理，动态配置，动态插拔插件，数据统计，数据展示，集群部署","number":567},"next":{"title":"stepchowfun/toast: 一个基于名为 toastfile 的 YAML 文件中定义任务，用于容器化工作流程的工具。","number":569}}},
    "staticQueryHashes": ["151096407","2861350382"]}