StreamGuard, 7/24 yayın altyapıları için geliştirilmiş bir yayın sağlığı ve olay müdahale platformudur.
Sadece "yayın açık mı?" sorusunu cevaplamaz; yayını görsel (OpenCV), işitsel (FFmpeg volumedetect) ve operasyonel (dashboard + alarm pipeline) boyutta birlikte değerlendirir.
Bir sorun tespit edildiğinde:
- Alarm koşullarını eşik tabanlı doğrular,
- Telegram üzerinden anlık bilgilendirir,
- İstenirse olay anına ait kanıt videosunu (DVR clip) üretip gönderir,
- Durumu gerçek zamanlı dashboard'a işler.
- Gerçek sinyal zekasi: Donan görüntü, sessiz ses, boş frame, kesilen akış gibi sahadaki gerçek sorunlara odaklanır.
- Operasyonel aksiyon: Alarm sadece log'a yazılmaz; ekip aksiyon alabilsin diye mesaj ve video kanıt zinciri kurulur.
- Canlı gözlem paneli: Metrikler (
motion_score,volume_db) ve durum tek ekrandan izlenir. - Hafif ve pratik: CPU odaklı çalışma modeli ile küçük/orta ölçekli altyapılarda hızlı devreye alınır.
- Art arda alınan frame'ler arası fark hesaplanır (
absdiff+mean). - Fark skoru eşik altındaysa yayın "frozen" kabul edilir.
- Donma eşik değeri
config.jsonüzerinden yönetilir (thresholds.frozen_score).
- Akıştan kısa bir örnek alınır,
volumedetectile ortalama ses seviyesi ölçülür. - Ortalama dB seviyesi eşik altındaysa "silence" alarmı tetiklenir.
- Eşik değeri
thresholds.silence_dbile özelleştirilebilir.
- Tek seferlik paket kaybında yanlış alarmı azaltmak için sayaç yaklaşımı kullanılır.
- Arka arkaya hata sayısı
thresholds.alarm_limitdeğerine ulaşınca alarm üretilir. - Yayın geri döndüğünde otomatik "recovery" bildirimi gönderilir.
features.dvr_enabled=trueiken olay anında FFmpeg ile kısa klip kaydedilir.- Klip Telegram
sendVideoAPI ile ilgili gruba/kişiye iletilir. - Böylece NOC/operasyon ekibi sorunu sadece metinle değil görüntü ile de doğrular.
- FastAPI üzerinden API servis edilir.
- UI (
web/index.html) her saniye/api/statusendpoint'ini sorgular. - Start/Stop komutları dashboard'dan tetiklenir (
/api/start,/api/stop).
flowchart LR
A[Canli Yayin Kaynagi<br/>HLS / HTTP Stream] --> B[AI Monitoring Engine<br/>sesgoruntu/sesgoruntu.py]
subgraph C[Analiz Katmani]
C1[Video Analizi<br/>OpenCV frame diff]
C2[Ses Analizi<br/>FFmpeg volumedetect]
end
B --> C1
B --> C2
C1 --> D{Karar Motoru}
C2 --> D
D -->|Saglikli| E[LIVE Durumu]
D -->|Anomali| F[Alarm Sayaci]
F -->|alarm_limit asildi| G[Telegram Alarm]
F -->|DVR acik| H[FFmpeg Kanit Kaydi]
H --> I[Telegram Video Gonderimi]
B --> J[status.json Yazimi]
J --> K[FastAPI<br/>dashboard_api.py]
K --> L[Web Dashboard<br/>web/index.html]
L -->|Kontrol| K
K -->|Start/Stop| B
StreamGuard-main/
├─ dashboard_api.py # FastAPI kontrol + durum API'si
├─ sesgoruntu/
│ └─ sesgoruntu.py # Ana AI izleme motoru (audio+video+dvr)
├─ final.py # SNMP tabanli cihaz kilit/sinyal takibi
├─ stream_takip.py # Basit web stream erisilebilirlik kontrolu
├─ web/
│ └─ index.html # Gercek zamanli dashboard arayuzu
├─ config.json # Tum merkez konfigurasyon
├─ status.json # Motor tarafindan uretilen anlik durum dosyasi
└─ requirements.txt
- Python
3.9+ - FFmpeg (
ffmpegkomutu PATH'te olmali veyafeatures.ffmpeg_pathtanimlanmali) - Internet erisimi (Telegram API ve stream kaynagi icin)
pip install -r requirements.txt{
"telegram": {
"bot_token": "YOUR_TELEGRAM_BOT_TOKEN",
"chat_id": "YOUR_TELEGRAM_CHAT_ID"
},
"streams": [
{
"url": "https://example.com/live/stream.m3u8"
}
],
"thresholds": {
"silence_db": -50.0,
"frozen_score": 0.5,
"alarm_limit": 2,
"check_interval_sec": 5
},
"features": {
"dvr_enabled": true,
"dvr_duration_sec": 15,
"ffmpeg_path": "ffmpeg"
}
}Dashboard + motor kontrol katmanini baslat:
python dashboard_api.pyArdindan tarayicidan ac:
| Endpoint | Method | Aciklama |
|---|---|---|
/api/status |
GET |
Durum ve metrikleri doner (status.json + process bilgisi) |
/api/start |
POST |
Monitoring engine process'ini baslatir |
/api/stop |
POST |
Monitoring engine process'ini durdurur |
| Alan | Tip | Aciklama |
|---|---|---|
telegram.bot_token |
string |
Telegram bot token |
telegram.chat_id |
string |
Uyari mesajlarinin gidecegi chat/grup ID |
streams[0].url |
string |
Izlenecek stream adresi |
thresholds.silence_db |
number |
Sessizlik esigi (dB) |
thresholds.frozen_score |
number |
Donma esigi (frame diff skoru) |
thresholds.alarm_limit |
number |
Alarm tetiklemek icin ard arda hata sayisi |
thresholds.check_interval_sec |
number |
Izleme dongu periyodu |
features.dvr_enabled |
bool |
Kanit video kaydi acik/kapali |
features.dvr_duration_sec |
number |
Kanit klibi suresi |
features.ffmpeg_path |
string |
FFmpeg binary yolu veya komut adi |
- Stream URL kalitesi dogrudan algilama performansini etkiler.
alarm_limitdusuk olursa hassasiyet artar, false positive riski de artar.frozen_scoreortama gore kalibre edilmelidir (sabit kamera, spor yayini, reklam break farkli davranir).- DVR ozelligi acikken disk ve ag kullanimi artar; kapasite planlamasi yapilmalidir.
config.jsonicindeki gizli bilgiler (token, chat id) ortama ozel tutulmalidir.- Uretim ortaminda CORS kurali kaynak bazli sinirlandirilmalidir.
- Telegram bot izinleri minimum yetki prensibine gore ayarlanmalidir.
- Coklu stream icin paralel worker mimarisi
- Prometheus/Grafana entegrasyonu
- Docker imaji + healthcheck
- Incident timeline ve alarm korelasyon paneli
Bu proje MIT lisansi altinda dagitilmaktadir.
