Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
AV-Chaos-Monkey — Chaos Monkey लेकिन ऑडियो वीडियो परीक्षण के लिए (webRTC और UDP) | Kitploit
उपकरण/GitHubGitHub/mdsadiqmd/av-chaos-monkey
वेब सुरक्षानेटवर्क सुरक्षापेनिट्रेशन टेस्टिंगक्लाउड सुरक्षाDevSecOpsकैओस इंजीनियरिंग
GitHubmdsadiqmd/av-chaos-monkey

AV-Chaos-Monkey

Chaos Monkey लेकिन ऑडियो वीडियो परीक्षण के लिए (webRTC और UDP)

रिपॉजिटरी देखें
5266 महीने पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

AV Chaos Monkey

वीडियो कॉन्फ्रेंसिंग सिस्टम्स के लोड टेस्टिंग के लिए वितरित कैओस इंजीनियरिंग प्लेटफ़ॉर्म। H.264/Opus स्ट्रीम के साथ 1500+ WebRTC प्रतिभागियों का अनुकरण करता है और गिरावट वाली स्थितियों के तहत सिस्टम की लचीलापन को मान्य करने के लिए नेटवर्क कैओस स्पाइक्स इंजेक्ट करता है।

आर्किटेक्चर

image
  1. मीडिया प्रोसेसिंग पाइपलाइन:

    • FFmpeg इनपुट वीडियो को स्टार्टअप पर H.264 Annex-B और Ogg/Opus में बदलता है
    • NAL Reader H.264 स्ट्रीम (SPS/PPS/IDR/Slices) को पार्स करता है
    • Opus Reader Ogg कंटेनर से 20ms ऑडियो फ्रेम्स निकालता है
    • फ्रेम्स मेमोरी में कैश किए जाते हैं, सभी प्रतिभागियों के बीच साझा (शून्य-कॉपी)
    • प्रति-प्रतिभागी एन्कोडिंग की तुलना में CPU ~90% कम करता है
  2. कंट्रोल प्लेन:

    • HTTP सर्वर (:8080) REST API के माध्यम से परीक्षण जीवनचक्र प्रबंधित करता है
    • Spike Scheduler कैओस इवेंट वितरित करता है (even/random/front/back/legacy)
    • Network Degrader कैओस लागू करता है: पैकेट लॉस (1-25%), जिटर (10-50ms), बिटरेट कमी (30-80%), फ्रेम ड्रॉप (10-60%)
    • लोडेड कैओस कॉन्फ़िगरेशन प्रतिभागी पूल पर लागू होता है
  3. प्रतिभागी पूल:

    • स्वचालित रूप से पॉड्स में विभाजित: participant_id % total_partitions = partition_id
    • प्रत्येक प्रतिभागी RTP स्ट्रीम उत्पन्न करता है (PT=96 वीडियो, PT=111 ऑडियो)
    • प्रतिभागी ID RTP एक्सटेंशन हेडर (ID=1) में एम्बेडेड
    • पूल आकार: 1-100 (लोकल), 100-500 (Docker), 500-1500 (Kubernetes)
  • Kubernetes ऑटो-कॉन्फ़िगरेशन:

    • पॉड्स पॉड नाम से विभाजन ID स्वतः पहचानते हैं: orchestrator-3 → PARTITION_ID=3
    • पोर्ट आवंटन: base_port + (partition_id × 10000) + participant_index
    • उदाहरण: विभाजन 0 5000-14999 का उपयोग करता है, विभाजन 1 15000-24999 का उपयोग करता है
    • 10 रेप्लिका वाला StatefulSet, प्रत्येक ~150 प्रतिभागियों को संभालता है
    • संसाधन: प्रति पॉड 1-4 CPU, 2-4Gi मेमोरी
    • होस्ट मशीन स्पेक्स के आधार पर स्वचालित रूप से कॉन्फ़िगर होता है
  • UDP रिले चेन (केवल Kubernetes):

    root@kitploit:~
    ऑर्केस्ट्रेटर पॉड्स (10×) → UDP :5000 → udp-relay पॉड (Python)
    → लेंथ-प्रीफिक्स्ड TCP :5001 → kubectl port-forward 15001:5001
    → tools/udp-relay (Go) → UDP :5002 → आपका रिसीवर
    
    • क्यों: kubectl port-forward केवल TCP समर्थन करता है, UDP नहीं
    • क्लस्टर में रिले: Python स्क्रिप्ट सभी पॉड्स से UDP एकत्र करती है, 2-बाइट लेंथ प्रीफ़िक्स के साथ TCP के रूप में स्ट्रीम करती है
    • लोकल रिले: Go टूल TCP स्ट्रीम को वापस UDP पैकेट में बदलता है
    • 1500 प्रतिभागी स्ट्रीम को एकल कनेक्शन में एकत्रित करता है
  • WebRTC इन्फ्रास्ट्रक्चर:

    • Coturn StatefulSet: 3 प्रारंभिक रेप्लिका, HPA लोड के आधार पर 1-10 स्केल करता है (~500 प्रतिभागी/रेप्लिका)
    • coturn-lb Service: TURN ट्रैफ़िक को रेप्लिका में लोड बैलेंस करता है
    • webrtc-connector: वैकल्पिक प्रॉक्सी लेयर (Deployment + HPA 2-10 रेप्लिका), SDP सिग्नलिंग संभालता है
    • Docker Mode: स्थानीय परीक्षण के लिए एकल Coturn कंटेनर
    • पोर्ट्स: 3478 (TURN), 49152-65535 (रिले रेंज)
    • क्रेडेंशियल्स: webrtc/webrtc123
  • क्लाइंट इंटीग्रेशन:

    • UDP रिसीवर: रिले चेन के माध्यम से सभी प्रतिभागियों से एकत्रित RTP स्ट्रीम प्राप्त करता है
    • WebRTC रिसीवर: TURN सर्वर के माध्यम से SDP आदान-प्रदान के माध्यम से 1:1 WebRTC कनेक्शन स्थापित करता है
    • दोनों आपके वीडियो कॉल सिस्टम (SFU/MCU/Mesh) के परीक्षण के लिए अग्रेषित करते हैं
  • ऑब्ज़र्वेबिलिटी स्टैक (वैकल्पिक):

    • Prometheus: हर 5 सेकंड में सभी ऑर्केस्ट्रेटर पॉड्स से /metrics एंडपॉइंट स्क्रैप करता है
    • Grafana: पूर्व-कॉन्फ़िगर्ड डैशबोर्ड (admin/admin) के माध्यम से मेट्रिक्स विज़ुअलाइज़ करता है
    • एक्सपोज़्ड मेट्रिक्स: प्रतिभागी संख्या, भेजे गए पैकेट, भेजे गए बाइट्स, सक्रिय स्पाइक्स, पैकेट लॉस %, जिटर, MOS स्कोर
    • एक्सेस: Prometheus :30090 पर, Grafana :30030 पर (NodePort)
    • स्वतः-खोज के लिए ऑर्केस्ट्रेटर पॉड्स एनोटेट: prometheus.io/scrape: "true"
  • मुख्य अवधारणाएँ

    प्रतिभागी अनुकरण

    प्रत्येक आभासी प्रतिभागी वास्तविक मीडिया स्ट्रीम उत्पन्न करता है:

    • वीडियो: वास्तविक वीडियो फ़ाइलों से H.264 NAL इकाइयाँ, RFC 6184 के अनुसार पैकेटीकृत
    • ऑडियो: Ogg कंटेनरों से Opus फ्रेम्स, RFC 7587 के अनुसार पैकेटीकृत
    • RTP: मानक-अनुरूप हेडर प्रतिभागी ID एक्सटेंशन के साथ
    • टाइमिंग: फ्रेम-सटीक टाइमिंग (30fps वीडियो, 20ms ऑडियो पैकेट)

    कैओस इंजेक्शन

    पाँच स्पाइक प्रकार वास्तविक दुनिया की नेटवर्क स्थितियों का अनुकरण करते हैं:

    • पैकेट लॉस: एप्लिकेशन लेयर पर RTP पैकेट छोड़ता है (1-100%)
    • नेटवर्क जिटर: विलंबता भिन्नता जोड़ता है (बेस + गाऊसी जिटर)
    • बिटरेट कमी: वीडियो एन्कोडिंग को थ्रॉटल करता है (30-80% कमी)
    • फ्रेम ड्रॉप: वीडियो फ्रेम्स छोड़ता है (10-60% ड्रॉप दर)
    • बैंडविड्थ लिमिटिंग: कुल थ्रूपुट को सीमित करता है

    वितरण रणनीतियाँ

    स्पाइक्स परीक्षण अवधि में कॉन्फ़िगरेबल रणनीतियों का उपयोग करके वितरित किए जाते हैं:

    • Even: जिटर के साथ एकसमान अंतराल (पूर्वानुमेय लोड)
    • Random: अप्रत्याशित समय (यथार्थवादी कैओस)
    • Front-loaded: शुरुआत में घने स्पाइक्स (रिकवरी परीक्षण)
    • Back-loaded: बेसलाइन फिर कैओस (तुलनात्मक परीक्षण)
    • Legacy: निश्चित अंतराल टिकर (रनटाइम इंजेक्शन)

    विभाजन (Partitioning)

    Kubernetes डिप्लॉयमेंट क्षैतिज स्केलिंग के लिए प्रतिभागी विभाजन का उपयोग करते हैं:

    • प्रत्येक पॉड हैंडल करता है participant_id % total_partitions == partition_id
    • पोर्ट आवंटन: base_port + (partition_id * 10000) + participant_index
    • 1-10 पॉड्स में स्वचालित लोड वितरण
    • 1500+ प्रतिभागियों तक स्केल (प्रति पॉड 150)

    सिस्टम चलाना

    1. स्थानीय विकास (नेटिव Go)

    सर्वोत्तम: विकास, डिबगिंग, छोटे पैमाने के परीक्षण (1-100 प्रतिभागी)

    root@kitploit:~
    # ऑर्केस्ट्रेटर शुरू करें
    go run cmd/main.go
    
    # दूसरे टर्मिनल में: UDP रिसीवर शुरू करें
    go run examples/go/udp_receiver.go 5002
    
    # config/config.json संपादित करके num_participants: 10 सेट करें
    # कैओस परीक्षण चलाएँ
    go run tools/chaos-test/main.go -config config/config.json
    

    क्या होता है:

    • एकल ऑर्केस्ट्रेटर प्रक्रिया :8080 पर
    • प्रतिभागी UDP 127.0.0.1:5002 पर भेजते हैं
    • कैओस स्पाइक्स HTTP API के माध्यम से इंजेक्ट किए जाते हैं
    • रीयल-टाइम मेट्रिक्स हर 2 सेकंड में प्रदर्शित होते हैं

    कॉन्फ़िगरेशन (config/config.json):

    root@kitploit:~
    {
      "base_url": "http://localhost:8080",
      "media_path": "public/rick-roll.mp4",
      "num_participants": 10,
      "duration_seconds": 300,
      "spikes": {
        "count": 20,
        "interval_seconds": 5,
        "types": { "rtp_packet_loss": {...}, "network_jitter": {...} }
      },
      "spike_distribution": {
        "strategy": "random",
        "min_spacing_seconds": 5,
        "jitter_percent": 15
      }
    }
    

    2. Docker Compose (कंटेनरीकृत)

    सर्वोत्तम: पृथक परीक्षण, CI/CD, मध्यम पैमाने के परीक्षण (100-500 प्रतिभागी)

    पूर्वापेक्षाएँ:

    • Docker Desktop 8-16GB मेमोरी आवंटन के साथ
    • docker-compose स्थापित
    root@kitploit:~
    # ऑर्केस्ट्रेटर कंटेनर बनाएँ और शुरू करें
    ./scripts/start_everything.sh build
    
    # दूसरे टर्मिनल में: UDP रिसीवर शुरू करें
    go run examples/go/udp_receiver.go 5002
    
    # config/config.json संपादित करके num_participants: 100 सेट करें
    # कैओस परीक्षण चलाएँ (कंटेनर को लक्ष्य करता है)
    go run tools/chaos-test/main.go -config config/config.json
    

    संसाधन सीमाएँ (docker-compose.yaml संपादित करें):

    root@kitploit:~
    services:
      orchestrator:
        deploy:
          resources:
            limits:
              cpus: "14.0"
              memory: 6G  # अधिक प्रतिभागियों के लिए बढ़ाएँ
    

    स्केलिंग गाइड:

    Docker मेमोरीअधिकतम प्रतिभागीCPU कोर
    8 GB~1004
    16 GB~2508
    24 GB~40012
    32 GB~50014

    3. Nix के साथ Kubernetes (उत्पादन पैमाना)

    सर्वोत्तम: बड़े पैमाने के परीक्षण (500-1500 प्रतिभागी), क्षैतिज स्केलिंग, उत्पादन सत्यापन

    पूर्वापेक्षाएँ:

    • Nix फ्लेक्स सक्षम के साथ
    • Docker Desktop या kind क्लस्टर
    • kubectl कॉन्फ़िगर किया गया

    चरण 1: Nix वातावरण में प्रवेश करें

    root@kitploit:~
    # Nix प्रदान करता है: Go, Docker, kubectl, kind, ffmpeg
    nix develop
    
    # या स्वतः-सक्रियण के लिए direnv का उपयोग करें
    echo "use flake" > .envrc
    direnv allow
    

    चरण 2: Kubernetes में डिप्लॉय करें

    root@kitploit:~
    # इष्टतम सेटिंग्स के साथ स्वतः-डिप्लॉय (सिस्टम संसाधनों का पता लगाता है)
    ./scripts/start_everything.sh run -config config/config.json
    
    # या कस्टम मीडिया फ़ाइलें निर्दिष्ट करें
    ./scripts/start_everything.sh run --media=path/to/video.mp4 -config config/config.json
    

    क्या होता है:

    1. Nix-प्रदत्त Go टूलचेन के साथ Docker इमेज बनाता है
    2. kind क्लस्टर बनाता/उपयोग करता है
    3. 10 ऑर्केस्ट्रेटर पॉड्स के साथ StatefulSet डिप्लॉय करता है
    4. UDP रिले पॉड डिप्लॉय करता है
    5. UDP रिले के लिए kubectl port-forward सेट करता है
    6. स्थानीय TCP→UDP रिले शुरू करता है
    7. सभी पॉड्स में कैओस परीक्षण चलाता है

    चरण 3: एकत्रित UDP स्ट्रीम प्राप्त करें

    विकल्प A: UDP रिसीवर (Kubernetes के लिए अनुशंसित)

    root@kitploit:~
    # सभी 1500 प्रतिभागियों से एकत्रित स्ट्रीम प्राप्त करता है
    go run ./examples/go/udp_receiver.go 5002
    

    विकल्प B: WebRTC रिसीवर (एकाधिक प्रतिभागी)

    root@kitploit:~
    # WebRTC के माध्यम से 150 प्रतिभागियों तक कनेक्ट करें
    go run ./examples/go/webrtc_receiver.go http://localhost:8080 <test_id> 150
    

    आर्किटेक्चर प्रवाह:

    root@kitploit:~
    10 पॉड्स में 1500 प्रतिभागी
      → प्रत्येक पॉड: 150 प्रतिभागी
      → participant_id % 10 द्वारा विभाजन
      → सभी udp-relay:5000 पर UDP भेजते हैं
      → UDP रिले एकत्रित करता है → TCP :5001
      → kubectl port-forward 15001:5001
      → स्थानीय रिले TCP → UDP :5002
      → आपके रिसीवर को सभी 1500 स्ट्रीम मिलती हैं
    

    नोट: start_everything.sh स्क्रिप्ट स्वचालित रूप से सेट करती है:

    • kubectl port-forward (udp-relay 15001:5001)
    • स्थानीय TCP→UDP रिले (tools/udp-relay)
    • आपको केवल रिसीवर चलाने की आवश्यकता है

    मैनुअल Kubernetes सेटअप

    root@kitploit:~
    # इमेज बनाएँ और लोड करें
    docker build -t chaos-monkey-orchestrator:latest .
    kind load docker-image chaos-monkey-orchestrator:latest
    
    # डिप्लॉय करें
    kubectl apply -f k8s/orchestrator/orchestrator.yaml
    kubectl apply -f k8s/udp-relay/udp-relay.yaml
    
    # पॉड्स की प्रतीक्षा करें
    kubectl wait --for=condition=ready pod -l app=orchestrator --timeout=300s
    
    # UDP रिले पोर्ट-फॉरवर्ड करें
    kubectl port-forward udp-relay 15001:5001 &
    
    # स्थानीय TCP→UDP रिले शुरू करें
    go run tools/udp-relay/main.go &
    
    # दूसरे टर्मिनल में: रिसीवर शुरू करें
    go run ./examples/go/udp_receiver.go 5002
    
    # दूसरे टर्मिनल में: कैओस परीक्षण चलाएँ
    go run tools/chaos-test/main.go -config config/config.json
    

    सफाई

    root@kitploit:~
    # Kubernetes संसाधन हटाएँ
    ./scripts/cleanup.sh
    
    # या पूरा क्लस्टर हटाएँ
    kind delete cluster --name av-chaos-monkey
    

    Nix के साथ क्रॉस-प्लेटफ़ॉर्म बिल्ड

    root@kitploit:~
    # Linux x86_64 के लिए बनाएँ (सबसे सामान्य)
    nix build .#packages.x86_64-linux.av-chaos-monkey
    
    # ARM64 के लिए बनाएँ (Raspberry Pi, AWS Graviton)
    nix build .#packages.aarch64-linux.av-chaos-monkey
    
    # macOS Intel के लिए बनाएँ
    nix build .#packages.x86_64-darwin.av-chaos-monkey
    
    # macOS Apple Silicon के लिए बनाएँ
    nix build .#packages.aarch64-darwin.av-chaos-monkey
    
    # बाइनरी स्थान
    ./result/bin/main
    

    API संदर्भ

    परीक्षण जीवनचक्र

    root@kitploit:~
    # परीक्षण बनाएँ
    POST /api/v1/test/create
    {
      "test_id": "optional_id",
      "num_participants": 100,
      "video": {...},
      "audio": {...},
      "duration_seconds": 600,
      "spikes": [...],
      "spike_distribution": {
        "strategy": "even",
        "min_spacing_seconds": 5,
        "jitter_percent": 15
      }
    }
    
    # परीक्षण शुरू करें
    POST /api/v1/test/{test_id}/start
    
    # मेट्रिक्स प्राप्त करें
    GET /api/v1/test/{test_id}/metrics
    
    # परीक्षण रोकें
    POST /api/v1/test/{test_id}/stop
    

    WebRTC सिग्नलिंग

    root@kitploit:~
    # SDP ऑफ़र प्राप्त करें
    GET /api/v1/test/{test_id}/sdp/{participant_id}
    
    # SDP उत्तर सेट करें
    POST /api/v1/test/{test_id}/sdp/{participant_id}
    {"sdp_answer": "v=0..."}
    

    कैओस इंजेक्शन

    root@kitploit:~
    # स्पाइक इंजेक्ट करें
    POST /api/v1/test/{test_id}/spike
    {
      "spike_id": "unique_id",
      "type": "rtp_packet_loss",
      "duration_seconds": 30,
      "participant_ids": [1001, 1002],
      "params": {"loss_percentage": "15"}
    }
    

    कॉन्फ़िगरेशन

    स्पाइक प्रकार

    प्रकारपैरामीटरप्रभाव
    rtp_packet_lossloss_percentage (0-100)RTP लेयर पर पैकेट छोड़ता है
    network_jitterbase_latency_ms, jitter_std_dev_msविलंबता भिन्नता जोड़ता है
    bitrate_reducenew_bitrate_kbpsवीडियो एन्कोडिंग को थ्रॉटल करता है
    frame_dropdrop_percentage (0-100)वीडियो फ्रेम्स छोड़ता है
    bandwidth_limitbandwidth_kbpsकुल थ्रूपुट को सीमित करता है

    वितरण कॉन्फ़िग

    root@kitploit:~
    {
      "spike_distribution": {
        "strategy": "even",
        "min_spacing_seconds": 5,
        "jitter_percent": 15,
        "respect_min_offset": true
      }
    }
    

    क्लाइंट इंटीग्रेशन

    UDP रिसीवर (Go)

    root@kitploit:~
    # RTP पार्सिंग के साथ प्रदान किया गया रिसीवर
    go run examples/go/udp_receiver.go 5002
    

    आउटपुट:

    root@kitploit:~
    Listening for RTP packets on UDP port 0.0.0.0:5002
    Packet #100 from 127.0.0.1:xxxxx:
      Participant ID: 1001
      Payload Type: 96 (H.264 video)
      Sequence: 1234
      Timestamp: 90000
      SSRC: 1001000
      Payload Size: 1200 bytes
    
    ═══════════════════════════════════════════════════════════
                        पैकेट सांख्यिकी                       
    ═══════════════════════════════════════════════════════════
    Duration: 60s
    Total Packets: 180000 (3000 pkt/s)
    Total Bytes: 450 MB (60 Mbps)
    
    मीडिया प्रकार विवरण:
      Video (H.264): 120000 packets (66.7%)
      Audio (Opus):  60000 packets (33.3%)
    
    अद्वितीय स्ट्रीम (SSRCs): 1500
    अद्वितीय प्रतिभागी: 1500
    

    WebRTC रिसीवर (Go)

    root@kitploit:~
    # एकल प्रतिभागी
    go run ./examples/go/webrtc_receiver.go http://localhost:8080 <test_id>
    
    # एकाधिक प्रतिभागी (150 तक)
    go run ./examples/go/webrtc_receiver.go http://localhost:8080 <test_id> 150
    
    # वास्तविक परीक्षण ID के साथ उदाहरण
    go run ./examples/go/webrtc_receiver.go http://localhost:8080 chaos_test_1770831684 150
    

    नोट: WebRTC को 1:1 कनेक्शन की आवश्यकता है। Kubernetes के लिए, UDP रिसीवर का उपयोग करें जो सभी प्रतिभागियों को स्वचालित रूप से एकत्रित करता है।

    कस्टम इंटीग्रेशन

    RTP पैकेट प्रारूप:

    root@kitploit:~
     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |V=2|P|X|  CC   |M|     PT      |       sequence number         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                           timestamp                           |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           synchronization source (SSRC) identifier            |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |  Extension ID=1 | Length=4    |    Participant ID (uint32)    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                         H.264/Opus Payload                    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    

    पेलोड प्रकार:

    • 96: H.264 वीडियो (RFC 6184)
    • 111: Opus ऑडियो (RFC 7587)

    प्रतिभागी ID निष्कर्षण:

    root@kitploit:~
    // एक्सटेंशन बिट सेट है?
    if (packet[0] & 0x10) != 0 {
        offset := 12 + int(packet[0]&0x0F)*4  // CSRC छोड़ें
        extID := binary.BigEndian.Uint16(packet[offset:])
        if extID == 1 {
            participantID := binary.LittleEndian.Uint32(packet[offset+4:])
        }
    }
    

    प्रदर्शन

    संसाधन आवश्यकताएँ

    प्रतिभागीमेमोरीCPUबैंडविड्थ
    1002GB2 कोर250 Mbps
    5006GB8 कोर1.2 Gbps
    100012GB16 कोर2.5 Gbps
    150018GB24 कोर3.7 Gbps

    Kubernetes स्केलिंग

    • स्वतः-स्केलिंग: प्रतिभागी संख्या के आधार पर इष्टतम पॉड गणना की गणना करता है
    • पॉड क्षमता: प्रति पॉड 150 प्रतिभागी (कॉन्फ़िगरेबल)
    • अधिकतम पॉड: 10 (StatefulSet सीमा)
    • पोर्ट रेंज: प्रति विभाजन 10,000 पोर्ट

    थ्रूपुट

    प्रति प्रतिभागी (1280x720@30fps + Opus):

    • वीडियो: ~2.5 Mbps (H.264)
    • ऑडियो: ~128 Kbps (Opus)
    • कुल: ~2.6 Mbps
    • पैकेट: ~90 वीडियो + 50 ऑडियो = 140 pkt/s

    मॉनिटरिंग

    Prometheus मेट्रिक्स

    root@kitploit:~
    # /metrics एंडपॉइंट पर एक्सपोज़्ड
    av_chaos_monkey_participants_total
    av_chaos_monkey_packets_sent_total
    av_chaos_monkey_bytes_sent_total
    av_chaos_monkey_spikes_active
    av_chaos_monkey_packet_loss_percent
    av_chaos_monkey_jitter_ms
    

    Grafana डैशबोर्ड

    root@kitploit:~
    # Docker Mode: मॉनिटरिंग स्टैक शुरू करें
    docker-compose --profile monitoring up
    
    # Kubernetes Mode: मॉनिटरिंग डिप्लॉय करें
    kubectl apply -f k8s/monitoring/prometheus-rbac.yaml
    kubectl apply -f k8s/monitoring/prometheus.yaml
    kubectl apply -f k8s/monitoring/grafana.yaml
    
    # Grafana एक्सेस करें
    # Docker: http://localhost:3000
    # Kubernetes: http://localhost:30030 (NodePort)
    # डिफ़ॉल्ट क्रेडेंशियल्स: admin/admin
    
    # Prometheus एक्सेस करें
    # Docker: http://localhost:9091
    # Kubernetes: http://localhost:30090 (NodePort)
    

    Kubernetes स्वतः-खोज:

    • ऑर्केस्ट्रेटर पॉड्स prometheus.io/scrape: "true" के साथ एनोटेट
    • Prometheus हर 5 सेकंड में सभी पॉड्स से /metrics स्क्रैप करता है
    • Grafana Prometheus डेटास्रोत के साथ पूर्व-कॉन्फ़िगर्ड
    • स्टार्टअप पर डैशबोर्ड स्वचालित रूप से प्रोविज़न किया जाता है

    रीयल-टाइम सांख्यिकी

    root@kitploit:~
    # परीक्षण मेट्रिक्स प्राप्त करें
    curl http://localhost:8080/api/v1/test/{test_id}/metrics | jq
    
    # आउटपुट
    {
      "aggregate": {
        "total_frames_sent": 45000,
        "total_packets_sent": 180000,
        "total_bitrate_kbps": 250000,
        "avg_jitter_ms": 12.5,
        "avg_packet_loss": 2.3,
        "avg_mos_score": 4.1
      }
    }
    

    समस्या निवारण

    कोई UDP पैकेट प्राप्त नहीं

    root@kitploit:~
    # UDP लक्ष्य कॉन्फ़िगरेशन जाँचें
    kubectl logs orchestrator-0 | grep "UDP transmission enabled"
    
    # सत्यापित करें कि UDP रिले चल रहा है
    kubectl get pod udp-relay
    
    # पोर्ट-फॉरवर्ड जाँचें
    ps aux | grep "kubectl port-forward"
    
    # UDP कनेक्टिविटी का परीक्षण करें
    nc -u -z localhost 5002
    

    WebRTC कनेक्शन विफल

    root@kitploit:~
    # TURN सर्वर जाँचें
    kubectl get svc coturn-lb
    
    # ICE उम्मीदवार सत्यापित करें
    kubectl logs orchestrator-0 | grep "ICE"
    
    # TURN कनेक्टिविटी का परीक्षण करें
    turnutils_uclient -v -u webrtc -w webrtc123 <turn-server>:3478
    

    उच्च मेमोरी उपयोग

    root@kitploit:~
    # प्रति पॉड प्रतिभागी संख्या जाँचें
    kubectl exec orchestrator-0 -- curl -s http://localhost:8080/api/v1/test/{test_id}/metrics | jq '.participants | length'
    
    # प्रतिभागियों को कम करें या पॉड संख्या बढ़ाएँ
    go run tools/k8s-start/main.go -replicas 10 -participants 1000
    
    # Docker मेमोरी बढ़ाएँ (Docker Desktop)
    # Settings → Resources → Memory → 16GB
    

    UDP रिसीवर में पैकेट लॉस

    एकल UDP सॉकेट कर्नेल बफ़र ओवरफ़्लो के बिना 3000+ समवर्ती स्ट्रीम नहीं संभाल सकता। समाधान:

    • UDP रिले का उपयोग करें (अग्रेषण से पहले एकत्रित करता है)
    • सॉकेट बफ़र बढ़ाएँ: setsockopt(SO_RCVBUF, 8MB)
    • बेसलाइन लॉस को माप कलाकृति के रूप में स्वीकार करें

    लाइसेंस

    BSD 3-Clause License

    योगदान

    योगदान का स्वागत है! मुख्य क्षेत्र:

    • अतिरिक्त स्पाइक प्रकार (CPU थ्रॉटलिंग, मेमोरी दबाव)
    • अधिक वितरण रणनीतियाँ (wave, burst)
    • उन्नत मेट्रिक्स (MOS गणना, RTCP फीडबैक)
    • क्लाइंट लाइब्रेरीज़ (Python, Rust, TypeScript)

    संदर्भ

    • RFC 3550 - RTP: A Transport Protocol for Real-Time Applications
    • RFC 6184 - RTP Payload Format for H.264 Video
    • RFC 7587 - RTP Payload Format for Opus
    • WebRTC Specification
    टूल डाउनलोड करें