# Serverless Video Streaming API

### ओवरव्यू

Serverless Streaming API वेबकैम, RTSP कैमरों, या वीडियो फ़ाइलों से वीडियो को Roboflow Cloud में स्ट्रीम करने के लिए WebRTC का उपयोग करता है। आपका [Workflow](https://docs.roboflow.com/workflows/what-is-workflows) प्रत्येक फ्रेम को प्रोसेस करता है और परिणामों को आपके एप्लिकेशन को स्ट्रीम करता है।

आप इस API के साथ कोई भी Workflow चला सकते हैं। सिंगल मॉडल इन्फरेंस के लिए, अपने मॉडल को रैप करने वाला एक Workflow बनाएं।

**समर्थित इनपुट स्रोत:**

* **वेबकैम**: MediaStream API के माध्यम से ब्राउज़र या डिवाइस कैमरा
* **RTSP**: IP कैमरे या कोई भी RTSP-संगत स्रोत। URL को इंटरनेट से सार्वजनिक रूप से सुलभ होना चाहिए ताकि क्लाउड फ़ंक्शन उससे कनेक्ट कर सके। URL में उपयोगकर्तानाम/पासवर्ड के माध्यम से प्रमाणीकरण समर्थित है (उदा., `rtsp://user:pass@host/stream`).
* **वीडियो फ़ाइलें**: प्री‑रेकॉर्डेड वीडियो जिसे Data Channel के माध्यम से अपलोड किया गया है

### यह कैसे काम करता है

जब आप एक स्ट्रीमिंग सेशन शुरू करते हैं, SDK एक WebRTC कनेक्शन को इनिशियलाइज़ करने के लिए Roboflow की API को कॉल करता है। API एक serverless फ़ंक्शन स्पॉन करता है जो आपका Workflow चलाता है। एक बार कनेक्ट हो जाने पर डेटा दो WebRTC चैनलों के माध्यम से बहता है:

#### वीडियो ट्रैक

वीडियो फ्रेम्स को द्विदिशात्मक रूप से स्ट्रीम करता है। आप अपने वेबकैम या वीडियो फ़ाइल से फ्रेम भेजते हैं, और एनोटेटेड/प्रोसेस किए गए फ्रेम वापस प्राप्त करते हैं। वीडियो ट्रैक रीयल‑टाइम डिस्प्ले के लिए अनुकूलित है: यह रेज़ोल्यूशन समायोजित करता है और उपलब्ध बैंडविड्थ के आधार पर फ्रेम ड्रॉप कर सकता है। जैसे‑जैसे कनेक्शन स्थिर होता है, क्वालिटी बढ़ती है।

WebRTC कंजेशन कंट्रोल के कारण, उच्च रेज़ोल्यूशन जैसे 1920×1080 @ 30 FPS पर पूर्ण क्षमता तक क्वालिटी और FPS के रैम्प अप होने में एक मिनट तक लग सकता है।

#### डाटा चैनल

स्ट्रक्चर्ड इन्फरेंस परिणामों को JSON संदेशों के रूप में भेजता है। इसमें predictions, coordinates, और classifications जैसे सभी Workflow आउटपुट डेटा शामिल हैं। वीडियो ट्रैक के विपरीत, डाटा चैनल विश्वसनीय, क्रमबद्ध डिलीवरी प्रदान करता है और लाइव कैमरा फ़ीड के साथ बने रहने के लिए किसी प्रकार के रिस्पांस‑ऑप्टिमाइज़ेशन का उपयोग नहीं करता। वीडियो फ़ाइलों को प्रोसेस करने के लिए, आप फ़ाइल को Data Channel के माध्यम से अपलोड कर सकते हैं और उसी तरह परिणामों को उपभोग कर के वीडियो को पूर्ण रूप से प्रोसेस कर सकते हैं।

आप दोनों चैनलों का एक साथ उपयोग कर सकते हैं — उदाहरण के लिए एनोटेटेड वीडियो दिखाते हुए अपने एप्लिकेशन में स्ट्रक्चर्ड प्रेडिक्शन डेटा भी प्रोसेस करना।

### रीजन और GPU प्लान

निर्दिष्ट करें `requested_region` और `requested_plan` अपनी कॉन्फ़िगरेशन में ताकि यह नियंत्रित कर सकें कि आपकी स्ट्रीम कहां और कैसे प्रोसेस की जाती है।

**रीजन:** `us` (यूनाइटेड स्टेट्स), `eu` (यूरोप), `ap` (एशिया पैसिफिक)

लेटेंसी कम करने के लिए अपने उपयोगकर्ताओं या वीडियो स्रोत के सबसे नज़दीकी रीजन को चुनें।

**GPU प्लान:**

* `webrtc-gpu-medium`: अधिकांश वर्कफ़्लो के लिए डिफ़ॉल्ट और अनुशंसित
* `webrtc-gpu-small`: कम लागत। यह तब आज़माएँ जब आपने पुष्टि कर ली हो कि Medium आपके उपयोग‑मामले में अच्छी तरह काम करता है।
* `webrtc-gpu-large`: SAM3 और SAM3 का उपयोग करने वाले Rapid Models के लिए आवश्यक (लगभग \~5 FPS की अपेक्षा रखें)

### मूल्य निर्धारण

चुने गए GPU प्लान के आधार पर प्रति घंटे बिल किया जाता है। बिलिंग तब शुरू होती है जब serverless फ़ंक्शन स्पॉन होता है और WebRTC कनेक्शन स्थापित हो जाता है। देखें [roboflow.com/credits](https://roboflow.com/credits) वर्तमान दरों के लिए।

### SDKs

#### JavaScript

वेब ब्राउज़र और React Native एप्लिकेशन के लिए।

```bash
npm install @roboflow/inference-sdk
```

अपनी API कुंजी को फ्रंटएंड कोड में उजागर न करें। इसे सुरक्षित रखने के लिए एक बैकएंड प्रॉक्सी एंडपॉइंट का उपयोग करें।

* [NPM पैकेज](https://www.npmjs.com/package/@roboflow/inference-sdk)
* [सैंपल एप्लिकेशन](https://github.com/roboflow/inferenceSampleApp)
* [डॉक्यूमेंटेशन](https://docs.roboflow.com/deploy/sdks/web-browser/web-inference-sdk)

#### Python

बैकएंड एप्लिकेशन, RTSP स्ट्रीम और वीडियो फ़ाइल प्रोसेसिंग के लिए।

```bash
pip install inference-sdk[webrtc]
```

* [PyPI पैकेज](https://pypi.org/project/inference-sdk/)
* [उदाहरण स्क्रिप्ट्स](https://github.com/roboflow/inference/tree/main/examples/webrtc_sdk) (वेबकैम, RTSP, वीडियो फ़ाइल)

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

स्ट्रीमिंग सेशन बनाते समय, पास करें एक `StreamConfig` ऑब्जेक्ट ताकि व्यवहार को नियंत्रित किया जा सके:

* `stream_output`: Video Track के माध्यम से स्ट्रीम करने के लिए Workflow आउटपुट नामों की सूची
* `data_output`: Data Channel के माध्यम से भेजने के लिए Workflow आउटपुट नामों की सूची
* `requested_plan`: GPU प्लान (ऊपर देखें)
* `requested_region`: रीजन कोड (`us`, `eu`, या `ap`)
* `realtime_processing`: यदि `True` (डिफ़ॉल्ट), तो जब प्रोसेसिंग पकड़ न सके तो फ्रेम ड्रॉप करें
* `workflow_parameters`: Workflow को पास करने के लिए पैरामीटर का डिक्शनरी

### कोड के बिना परीक्षण

आप Roboflow वेब इंटरफ़ेस में सीधे स्ट्रीमिंग का परीक्षण कर सकते हैं:

1. जाएँ [app.roboflow.com](https://app.roboflow.com)
2. खोलें **Workflows** टैब
3. एक Workflow चुनें और क्लिक करें **Test Workflow**
4. अपने स्रोत (Webcam, RTSP, या Video File) चुनें और GPU/रीजन सेटिंग्स कॉन्फ़िगर करें
5. क्लिक करें **Run**
