Windows Screen Streaming համակարգ

Windows-ի համար background համակարգ՝ մի քանի էկրանի capture-ի, առանձին RTSP stream-ների և դրանց աշխատանքի վերահսկման համար։

Windows համակարգեր · StreamingSystem Architecture & ImplementationՉհրապարակվող production համակարգ

Համատեքստ

Պետք էր ստեղծել Windows background հավելված, որը կարող էր միաժամանակ capture անել մեկ կամ մի քանի էկրան, յուրաքանչյուրի համար ստեղծել առանձին stream և դրանք հասանելի դարձնել ցանցով՝ առանց բաց foreground interface-ի։

Ինչ պետք էր լուծել

Խնդիրը միայն էկրանը capture անելն ու FFmpeg գործարկելը չէր։ Հավելվածը պետք է կառավարեր capture process-ները և MediaMTX-ը, ճիշտ աշխատեր տարբեր monitor-ների դիրքերի ու չափերի հետ, վերականգներ խափանված process-ները և Windows restart-ից հետո պահպաներ անհրաժեշտ configuration-ը։

Ինչ պետք էր հաշվի առնել

  • Հավելվածը պետք է աշխատեր background ռեժիմում, ավտոմատ մեկնարկեր Windows-ի հետ, հասանելի լիներ LAN-ից և հնարավոր լիներ տեղադրել installer-ով։
  • Յուրաքանչյուր monitor ուներ իր bounds-ը, offset-ը և stream-ը, որոնք պետք էր ճիշտ կապել համապատասխան capture process-ի հետ։

System Architecture & Implementation

  • Նախագծել և իրականացրել եմ .NET հավելվածի կառուցվածքը՝ capture configuration-ի, process-ների կառավարման, recovery-ի և պահպանվող settings-ի համար։
  • Կառավարել եմ FFmpeg worker-ների և MediaMTX-ի lifecycle-ը՝ թույլ չտալով նույն stream-ի համար միաժամանակ մի քանի worker-ի աշխատանք։
  • Իրականացրել եմ multi-monitor streaming-ը, կարգավորվող resolution/FPS-ն ու RTSP port-երը, ինչպես նաև Windows installation-ի և firewall-ի հետ կապված անհրաժեշտ աշխատանքները։

Համակարգի կառուցվածքը

Streaming-ի հոսքըՀավելվածը կառավարում է ամբողջ հոսքը՝ էկրանի capture-ից մինչև ցանցով հասանելի RTSP stream։
Windows Host
.NET Background Application
Capture / Process Management
FFmpeg
Monitor 01 StreamMonitor 02 Stream
MediaMTX / RTSP
Remote Viewer / Consumer

Որտեղ էր բարդությունը

  • Հիմնական capture տարբերակը կառուցված էր FFmpeg ddagrab-ի վրա՝ DXGI / Desktop Duplication մեխանիզմով, իսկ gdigrab-ը դիտարկվում էր որպես այլընտրանքային capture path։
  • Capture-ի ժամանակավոր կորստից հետո համակարգը պետք էր վերականգնել այնպես, որ սխալ fallback կամ retry logic-ը cursor/mouse flicker չառաջացներ։
  • Տարբեր monitor-ների bounds-ն ու offset-ները պետք էր ճիշտ հաշվարկել և յուրաքանչյուր կարգավորված stream-ի համար պահել միայն մեկ աշխատող worker։
  • Process-ի crash-ի դեպքում պետք էր վերագործարկել միայն խափանված հատվածը՝ առանց մնացած stream-ների աշխատանքին անհարկի միջամտելու։

Ինչպես կառուցվեց լուծումը

  • FFmpeg worker-ների և MediaMTX-ի կառավարումը կենտրոնացվել է հավելվածում, որպեսզի այն միշտ կարողանա համեմատել սպասվող վիճակը իրականում աշխատող process-ների հետ։
  • Monitor-ների ընտրությունը, capture settings-ը, port-երը և startup configuration-ը պահպանվում են, որպեսզի համակարգը Windows restart-ից հետո վերականգնի անհրաժեշտ վիճակը։
  • Հավելվածը պատրաստվել է Windows-ում installer-ով տեղադրման համար՝ հաշվի առնելով նաև firewall-ի և LAN-ից հասանելիության պահանջները։

Խափանումների դեպքում

  • Հավելվածը հայտնաբերում է child process-ների խափանումները և անհրաժեշտության դեպքում վերագործարկում միայն համապատասխան process-ը՝ առանց duplicate worker ստեղծելու։
  • Ժամանակավոր display կամ capture խնդիրների դեպքում retry logic-ը թույլ է տալիս վերականգնել stream-ը՝ առանց ամբողջ համակարգը վերագործարկելու։

Ինչ ստացվեց

  • Ստեղծվել է աշխատող Windows streaming համակարգ՝ առանձին monitor stream-ներով, պահպանվող configuration-ով, process-ների վերահսկմամբ և խափանումներից հետո վերականգնման հստակ տրամաբանությամբ։

Տեխնոլոգիաներ և համակարգեր

C#.NET 8FFmpegMediaMTXRTSPddagrabgdigrabMSI

Մեքենային հատուկ configuration-ը, ցանցային հասցեները, credentials-ը և deployment-ի մասնավոր տվյալները չեն հրապարակվում։