ԸՆԴՀԱՆՈՒՐ ՊԱՏԿԵՐ
Համատեքստ
Պետք էր ստեղծել 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-ի հետ կապված անհրաժեշտ աշխատանքները։
ՃԱՐՏԱՐԱՊԵՏՈՒԹՅՈՒՆ
Համակարգի կառուցվածքը
ՏԵԽՆԻԿԱԿԱՆ ԲԱՐԴՈՒԹՅՈՒՆՆԵՐ
Որտեղ էր բարդությունը
- Հիմնական 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-ների վերահսկմամբ և խափանումներից հետո վերականգնման հստակ տրամաբանությամբ։
ՏԵԽՆԻԿԱԿԱՆ ՀԱՄԱՏԵՔՍՏ
Տեխնոլոգիաներ և համակարգեր
Մեքենային հատուկ configuration-ը, ցանցային հասցեները, credentials-ը և deployment-ի մասնավոր տվյալները չեն հրապարակվում։