Ana içeriğe geç

RTSP Canlı Yayını

Cihazda bir RTSP oturumu başlatın, callback'lerle bildirilen erişim noktası akışını izleyin ve döndürülen RTSP adresini uyumlu bir oynatıcıya aktarın.

Animated workflow

RTSP başlatma ve oynatma

RTSP başlatma, cihaz ve Wi-Fi tarafında birden çok aşamadan oluşur. Hiçbir ara aşamayı nihai başarı olarak değerlendirmeden her birini kullanıcıya gösterin.

Ana uygulama

Yayını Yapılandır

Varsayılan RTSP parametrelerini kullanın veya belgelenen bit hızı, kalite ve I-frame değerlerini ayarlayın.

SDK + cihaz

Erişim Noktasını Yapılandır

Erişim noktası yapılandırmasının başlamasını ve tamamlanmasını izleyin.

Cihaz

Canlı Yayın Moduna Gir

Cihazın canlı yayın moduna geçmesini bekleyin.

Cihaz

Erişim Noktasını Bekle

Uygulama bağlanmadan önce cihaz kendi erişim noktasını açar.

SDK + iOS

Erişim Noktasına Bağlan

Sağlanan SSID’yi gösterin ve bağlantı sonucunu izleyin.

Wi-Fi
Cihaz → uygulama

RTSP URL’sini Al

SDK’nın döndürdüğü rtsp:// adresini doğrulayın ve saklayın.

AIBudsLiveStream

Oynatmayı Başlat

Bir oynatıcı görünümü ekleyin ve URL’yi canlı VideoSource olarak oynatın.

Ana uygulama

Oturum Etkin

Etkin durumu yalnızca oturum başlatma callback’i başarıyla tamamlandıktan sonra güncelleyin.

yayın
Son callback

Bitir ve Temizle

Oynatıcı kaynaklarını durdurun; kullanıcı durdurmasıyla kesintiyi birbirinden ayırın.

RTSP adresi ile oturum başlatma callback'i ayrı olaylardır. Oturum tamamlanana veya kullanıcı durdurana kadar oynatma kaynaklarını koruyun.

Ön Koşullar

  • Cihaz bağlı ve hazırdır; LiveStreamingAPI protokolüne uyar.
  • supportsRTSPLiveStreaming değeri true olmalıdır.
  • Uygulamanız, SDK tarafından yönetilen cihaz erişim noktası bağlantı akışına hazırdır.
  • Aşağıda gösterilen SDK RTSP oynatıcısını kullanıyorsanız AIBudsLiveStream.xcframework ekleyin.

API Referansı

Framework

AIBuds.xcframework, AIBudsFoundation.xcframework ve isteğe bağlı olarak AIBudsLiveStream.xcframework

İçe Aktarma

Swift
import AIBuds
import AIBudsFoundation
import AIBudsLiveStream

Özellikler

Swift
/// Whether RTSP live streaming is supported
var supportsRTSPLiveStreaming: Bool { get }

Örnek Yöntemi

Swift
/// Start RTSP live streaming
/// - Parameters:
///   - params: RTSP stream parameters
///   - configureHotspotStartingHandler: Configure hotspot starting handler
///   - hotspotConfigureCompletionHandler: Hotspot configure completion handler
///   - enterLiveStreamingModeStartingHandler: Enter live streaming mode starting handler
///   - enterLiveStreamingModeCompletedHandler: Enter live streaming mode completed handler
///   - waitingForHotspotOpenHandler: Waiting for hotspot open handler
///   - connectDeviceHotspotStartingHandler: Connect device hotspot starting handler
///   - deviceHotspotConnectCompletionHandler: Device hotspot connect completion handler
///   - rtspAddressReceivedHandler: RTSP address received handler
///   - sessionStartCompletionHandler: Session start completion handler
///   - sessionFinishHandler: Session finish handler
func startRTSPLiveStreaming(
    withParams params: RTSPStreamParams,
    configureHotspotStartingHandler: AIBudsLiveStreamingConfigureHotspotStartingHandler?,
    hotspotConfigureCompletionHandler: AIBudsLiveStreamingHotspotConfigureCompletionHandler?,
    enterLiveStreamingModeStartingHandler: AIBudsEnterLiveStreamingModeStartingHandler?,
    enterLiveStreamingModeCompletedHandler: AIBudsEnterLiveStreamingModeCompletionHandler?,
    waitingForHotspotOpenHandler: AIBudsLiveStreamingStartingToWaitForHotspotOpenHandler?,
    connectDeviceHotspotStartingHandler: AIBudsLiveStreamingConnectDeviceHotspotStartingHandler?,
    deviceHotspotConnectCompletionHandler:
        AIBudsLiveStreamingDeviceHotspotConnectCompletionHandler?,
    rtspAddressReceivedHandler: AIBudsLiveStreamingRtspAddressReceivedHandler?,
    sessionStartCompletionHandler: AIBudsLiveStreamingSessionStartCompletionHandler?,
    sessionFinishHandler: AIBudsLiveStreamingSessionFinishHandler?
)

startRTSPLiveStreaming ile RTSPStreamParams öğelerine bakın.

RTSP Parametreleri

ÖzellikAnlamı
bitrateMbps. 0, cihaz varsayılanını ister.
qualityFactor0, kayıpsız kalite ister; daha büyük değerler sıkıştırmayı artırır.
iFrameIntervalBir I-frame öncesindeki P/B kare sayısıdır; daha büyük değerler sıkıştırmayı artırır.

SDK şu anda bu değerler için cihazdan bağımsız, sıfırdan farklı aralıklar yayımlamaz. Hedef cihaz sözleşmesi desteklenen değerleri belirtmiyorsa RTSPStreamParams.default kullanın.

Kullanım Örnekleri

Oynatıcıyı oturum boyunca saklayın. Örnek, iş akışındaki tüm callback’leri kullanır ve oynatmayı yalnızca geçerli bir RTSP URL’si alındıktan sonra başlatır.

Swift
let player = LiveStreamingPlayer()
player.addVideoView(to: videoContainerView)

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

streamingDevice.startRTSPLiveStreaming(
    withParams: .default,
    configureHotspotStartingHandler: { showStage("Configuring hotspot") },
    hotspotConfigureCompletionHandler: { success, error in
        showStage(
            success
                ? "Hotspot configured"
                : error?.localizedDescription ?? "Hotspot configuration failed")
    },
    enterLiveStreamingModeStartingHandler: { showStage("Entering live-stream mode") },
    enterLiveStreamingModeCompletedHandler: { success, error in
        showStage(
            success
                ? "Live-stream mode entered" : error?.localizedDescription ?? "Mode entry failed")
    },
    waitingForHotspotOpenHandler: { showStage("Waiting for device hotspot") },
    connectDeviceHotspotStartingHandler: { ssid in showStage("Connecting to \(ssid)") },
    deviceHotspotConnectCompletionHandler: { success, error in
        showStage(
            success
                ? "Device hotspot connected"
                : error?.localizedDescription ?? "Hotspot connection failed")
    },
    rtspAddressReceivedHandler: { address in
        guard let url = URL(string: address), url.scheme?.lowercased() == "rtsp" else { return }
        let source = VideoSource(url: url, videoType: .normal)
        source.isLiveStream = true
        player.play(source: source)
    },
    sessionStartCompletionHandler: { success, error in
        setStreamingActive(success)
        if let error { show(error) }
    },
    sessionFinishHandler: { userStopped, error in
        player.stop()
        setStreamingActive(false)
        handleFinish(userStopped: userStopped, error: error)
    }
)

Hata Yönetimi

Erişim noktası yapılandırmasını, moda geçişi, erişim noktası bağlantısını, oturum başlangıcını, oynatıcı hatasını ve kullanıcı dışı sonlanmayı ayrı hata noktaları olarak ele alın. Başarılı bir ara callback, sonraki aşamaların veya oynatmanın da başarılı olacağını garanti etmez.

Notlar

  • SDK, RTSP adresini eşzamansız döndürür; varsayımla cihaz URL’si oluşturmayın.
  • RTSP oynatma sırasında iPhone’un cihaz erişim noktasına bağlı kalması gerekir.
  • Demo, alınan RTSP kaynağını isteğe bağlı olarak LiveStreamer üzerinden RTMP’ye aktarabilir. Bu ayrı bir yayıncı yaşam döngüsüdür ve uygulamanın sağladığı bir RTMP URL’si gerektirir.