Implementieren Sie den PIP -Modus für meine Agora -Videoanruf -AppIOS

Programmierung für iOS
Anonymous
 Implementieren Sie den PIP -Modus für meine Agora -Videoanruf -App

Post by Anonymous »

NATIVE PIP -Modus mit AVSampleBufferDisplaylayer in Agora iOS SDK
arbeite an einer Agora Live -Streaming -Funktion in einer iOS -Swift -App, in der ich AvSampleBufferDisplaylayer verwende, um Agoras OnrendervideoFrame -Delegate -Frames zu rendern. Der Live-Video-Stream funktioniert im Vordergrund gut, aber ich kann native Bild-in-Bild-Modus (PIP) nicht aktivieren, wenn die App in den Hintergrund geht.

Code: Select all

agoraKit.setParameters("{\"che.video.keep_last_frame\": true}")
agoraKit.setVideoFrameDelegate(self)
agoraKit.setParameters("{\"che.video.force_renderer_background\": true}")
agoraKit.enableVideo()
agoraKit.setVideoFrameDelegate(self)
agoraKit.enableLocalVideo(true)
agoraKit.setChannelProfile(.liveBroadcasting)
agoraKit.setClientRole(.broadcaster)
// agoraKit.enableWebSdkInteroperability(true)
agoraKit.setParameters("{\"rtc.video.pip\": true}")
agoraKit.setParameters("{\"rtc.video.background_mode\": 1}")
agoraKit.setParameters("{\"rtc.video.enable_ios_background_mode\": true}")
< /code>
< /li>
  Verarbeitung von Videorahmen in OnrendervideoFrame
Ich veriere mich mit den eingehenden Frames und rendere sie mit avagerBufferDisplaylayer. < /p>
private var videoLayerRemote: AVSampleBufferDisplayLayer?
func onRenderVideoFrame(_ videoFrame: AgoraOutputVideoFrame, uid: UInt, channelId: String) -> Bool {
frameCount += 1

// Ignore local video frames
if uid == localUid {
return true
}

var sampleBuffer: CMSampleBuffer?

if videoFrame.type == 1 { // I420 Format
guard let yBuffer = videoFrame.yBuffer,
let uBuffer = videoFrame.uBuffer,
let vBuffer = videoFrame.vBuffer else {
return true
}

sampleBuffer = convertI420ToCMSampleBuffer(yPlane: yBuffer,
uPlane: uBuffer,
vPlane: vBuffer,
width: Int(videoFrame.width),
height: Int(videoFrame.height))
} else {
guard let pixelBuffer = videoFrame.pixelBuffer else {
return true
}
sampleBuffer = createSampleBuffer(from: pixelBuffer)
}

guard let videoLayer = videoLayerRemote else {
return true
}

if videoLayer.status == .failed {
videoLayer.flush()
}

if !videoLayer.isReadyForMoreMediaData {
return true
}

videoLayer.enqueue(sampleBuffer!)

return true
}
< /code>
< /li>
PIP-Konfiguration
Ich habe Folgendes durchgeführt, um ein Bild-in-Bild (PIP) zu aktivieren. Fetch < /li>
Multiprocessing
Förderungsfähigkeit für Multi-Kamera-Zugriff < /li>
< /ul>
< /li>
< /ol>
Versucht mit AvpictureInpictureController mit AVPSPABEMS-ABSPROBER-AUSPLET-AUSPLET-AUSPLET. Hintergrund: < /p>
Das Video stoppt das Rendering.
PIP -Modus wird nicht aktiviert. PIP-Modus (Bild-in-Picture). AvPlayerLayer, aber das hat nicht funktioniert. Konfigurieren Sie PIP, konfigurieren aber nicht AvampleBufferDisplayLayer zum Anzeigen. Agora iOS -App? Spalten Sie sie auf, wenn die App im Hintergrund und ausblendet, wenn die App im Vordergrund steht

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post