Ana içeriğe geç

JPEG Görüntü Canlı Yayını

Cihazın JPEG canlı yayın modunu başlatın ve SDK'nın ilettiği her eksiksiz JPEG görüntüsünü ekranda gösterin. Uyumlu level-2 akışları ayrıca Opus sesi ve varsa kod çözümü yapılmış PCM verisi iletebilir.

Ön Koşullar​

  • Cihaz bağlı ve hazırdır; LiveStreamingAPI protokolüne uyar.
  • supportsJPEGImageLiveStreaming değeri true olmalıdır.
  • Uygulamanız, akışı engellemeden görüntü ve isteğe bağlı ses callback'lerini işleyebilmelidir.

API Referansı​

Framework​

AIBuds.xcframework

İçe Aktarma​

Swift
import AIBuds
import UIKit

Özellikler​

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

Örnek Yöntemi​

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 öğesine bakın.

Callback Değerleri​

İşleyiciDeğerlerAnlamı
sessionStartCompletionHandlersuccess, errorCanlı yayın oturumunun başlayıp başlamadığını bildirir.
jpegDataReceivedHandlerjpegDataEksiksiz bir JPEG görüntüsünü Data / NSData olarak iletir.
opusDataReceivedHandleropusData, decodedPcmAudioDataUyumlu level-2 akışlarında özgün Opus verisini ve varsa kod çözümü yapılmış PCM sesini iletir.
sessionFinishHandlerisUserInitiatedStop, errorOturumun nihai sonucunu ve durdurmanın kullanıcı tarafından başlatılıp başlatılmadığını bildirir.

Dönüş Değeri​

Yöntem doğrudan değer döndürmez. Medya ve yaşam döngüsü sonuçları işleyiciler aracılığıyla iletilir.

Kullanım Örnekleri​

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)
        }
    }
)

Hata Yönetimi​

  • Geçersiz JPEG verisini reddedin; son geçerli görüntüyü değiştirmeyin.
  • Ses verisi isteğe bağlıdır. Ses callback'i yalnızca uyumlu akışlarda çağrılır ve kod çözümü yapılmış PCM nil olabilir.
  • sessionStartCompletionHandler hatasını başarısız oturum başlangıcı olarak ele alın.
  • sessionFinishHandler içinde kullanıcı durdurmasıyla kesintiyi ayırın; varsa error değerini kullanın.
  • SDK’nın sağladığı callback sırasının ötesinde kare kaybı, kare hızı veya sıralama garantisi çıkarmayın.

En İyi Uygulamalar​

  1. Her JPEG karesini saklamayın; gösterilen görüntüyü değiştirin veya sınırlı tampon kullanın.
  2. Callback birikmesini önlemek için görüntü kod çözme ve kullanıcı arayüzüne atama işlemlerini hafif tutun.
  3. Yeni oturum başladığında kare sayaçlarını ve sunum durumunu temizleyin.
  4. Özellikten çıkarken yalnızca görüntü görünümünü gizlemek yerine stopLiveStreaming() çağırın.
  5. Ses gerekmiyorsa nil değerini opusDataReceivedHandler için geçin.

Notlar​

  • Genel SDK sabit bir JPEG çözünürlüğü veya kare hızı belirtmez.
  • JPEG modu AIBudsLiveStream oynatma sınıflarını gerektirmez.
  • jpegDataReceivedHandler, ham piksel tamponları yerine sıkıştırılmış JPEG verisi sağlar.
  • RTMP yayınını ayrı bir AIBudsLiveStream.LiveStreamer yaşam döngüsüyle yönetin. Doğrudan giriş modunu configure(outputURL:config:) ile yapılandırın; yalnızca yayın başladıktan sonra JPEG karelerini pushJpegFrame(_:), boş olmayan ve kod çözümü yapılmış PCM'i ise pushPcmAudio(_:) ile iletin.