मुख्य कंटेंट तक स्किप करें

JPEG Image लाइव स्ट्रीमिंग

डिवाइस का JPEG लाइव-स्ट्रीम मोड शुरू करें और SDK से मिली हर पूरी JPEG इमेज दिखाएँ। संगत level-2 स्ट्रीम Opus ऑडियो और उपलब्ध होने पर डिकोड किया हुआ PCM डेटा भी दे सकती हैं।

आवश्यकताएँ​

  • डिवाइस कनेक्ट और तैयार है तथा LiveStreamingAPI का अनुपालन करता है।
  • supportsJPEGImageLiveStreaming का मान true है।
  • आपका ऐप स्ट्रीम को रोके बिना इमेज और वैकल्पिक ऑडियो कॉलबैक को संभाल सकता है।

API संदर्भ​

Framework​

AIBuds.xcframework

Import​

Swift
import AIBuds
import UIKit

गुण​

Swift
/// Whether JPEG image live streaming is supported
var supportsJPEGImageLiveStreaming: Bool { get }

Instance विधि​

Swift
/// Start JPEG image live streaming
/// - Parameters:
///   - sessionStartCompletionHandler: Session start completion handler
///   - jpegDataReceivedHandler: JPEG data received handler
///   - opusDataReceivedHandler: Opus audio data received handler (only called for level-2 Ogg/MJPEG+Opus streams)
///   - sessionFinishHandler: Session finish handler
func startJPEGImageLiveStreaming(
    withSessionStartCompletionHandler sessionStartCompletionHandler: AIBudsLiveStreamingSessionStartCompletionHandler?,
    jpegDataReceivedHandler: AIBudsLiveStreamingJpegDataReceivedHandler?,
    opusDataReceivedHandler: AIBudsLiveStreamingOpusAudioDataReceivedHandler?,
    sessionFinishHandler: AIBudsLiveStreamingSessionFinishHandler?
)

startJPEGImageLiveStreaming देखें।

Callback मान​

Handlerमानअर्थ
sessionStartCompletionHandlersuccess, errorLive-stream session शुरू हुआ या नहीं बताता है।
jpegDataReceivedHandlerjpegDataएक पूरी JPEG image को Data / NSData के रूप में देता है।
opusDataReceivedHandleropusData, decodedPcmAudioDataसंगत level-2 स्ट्रीम पर मूल Opus डेटा और उपलब्ध होने पर डिकोड किया हुआ PCM ऑडियो देता है।
sessionFinishHandlerisUserInitiatedStop, errorअंतिम session result और stop उपयोगकर्ता ने शुरू किया था या नहीं बताता है।

Return मान​

यह मेथड सीधे कोई मान नहीं लौटाता। मीडिया और जीवनचक्र के परिणाम हैंडलर से मिलते हैं।

उपयोग के उदाहरण​

Swift
guard let streamingDevice = device as? LiveStreamingAPI,
    streamingDevice.supportsJPEGImageLiveStreaming
else { return }

streamingDevice.startJPEGImageLiveStreaming(
    withSessionStartCompletionHandler: { success, error in
        DispatchQueue.main.async {
            self.setStreamingActive(success)
            if let error { self.show(error) }
        }
    },
    jpegDataReceivedHandler: { jpegData in
        // Decode away from the UI update, then assign the image on the main queue.
        guard let image = UIImage(data: jpegData) else { return }
        DispatchQueue.main.async {
            self.imageView.image = image
        }
    },
    opusDataReceivedHandler: { opusData, decodedPcmAudioData in
        guard let decodedPcmAudioData, !decodedPcmAudioData.isEmpty else { return }
        self.consumePCM(decodedPcmAudioData)
    },
    sessionFinishHandler: { userStopped, error in
        DispatchQueue.main.async {
            self.setStreamingActive(false)
            self.handleFinish(userStopped: userStopped, error: error)
        }
    }
)

त्रुटि प्रबंधन​

  • अंतिम valid image बदले बिना invalid JPEG data reject करें।
  • ऑडियो डेटा वैकल्पिक है। ऑडियो हैंडलर केवल संगत स्ट्रीम के लिए बुलाया जाता है और डिकोड किया हुआ PCM nil हो सकता है।
  • sessionStartCompletionHandler failure को failed session start मानें।
  • sessionFinishHandler में user stop और interruption अलग करें और मौजूद होने पर error उपयोग करें।
  • SDK callback sequence से आगे frame loss, frame rate या ordering guarantee का अनुमान न लगाएँ।

श्रेष्ठ अभ्यास​

  1. हर JPEG frame न रखें; displayed image बदलें या bounded buffer उपयोग करें।
  2. Callback backlog से बचने के लिए image decoding और UI assignment हल्के रखें।
  3. नया session शुरू होने पर frame counters और presentation state साफ़ करें।
  4. Feature छोड़ते समय केवल image view छिपाने के बजाय stopLiveStreaming() बुलाएँ।
  5. ऑडियो आवश्यक न हो तो nil को opusDataReceivedHandler के मान के रूप में दें।

नोट्स​

  • Public SDK fixed JPEG resolution या frame rate तय नहीं करता।
  • JPEG मोड को AIBudsLiveStream की प्लेबैक क्लास की आवश्यकता नहीं है।
  • jpegDataReceivedHandler compressed JPEG data देता है, raw pixel buffers नहीं।
  • RTMP प्रसारण के लिए AIBudsLiveStream.LiveStreamer का अलग जीवनचक्र है। सीधे इनपुट वाले मोड को configure(outputURL:config:) से कॉन्फ़िगर करें। प्रसारण शुरू होने के बाद ही JPEG फ़्रेम को pushJpegFrame(_:) और खाली न होने वाले डिकोड किए गए PCM को pushPcmAudio(_:) दें।