Unable to Use Native PiP Mode with AVSampleBufferDisplayLayer in Agora iOS SDK
I am working on an Agora Live Streaming feature in an iOS Swift app, where I am using AVSampleBufferDisplayLayer to render Agora's onRenderVideoFrame delegate рамы. Видеопоток в прямом эфире хорошо работает на переднем плане, но я не могу включить нативный режим изображения в картине (PIP), когда приложение входит в фон.
Код: Выделить всё
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>
Обработка видео кадров в onrendervideoframe < /code>
Я обрабатываю входящие рамки и делаю их с помощью AvsampleBufferDisplayLayer. < /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
Я сделал следующее, чтобы включить изображение в картинке (PIP): < /p>
Включенные фоновые режимы: < /p>
Audio, Airplay и Picture Picture < /li>
Fetch < /li>
Многопроцесс
Добавлена возможность для доступа к нескольким камере < /li>
< /ul>
< /li>
< /ol>
Проблема < /h2>
Когда приложение не вносит фона. AVSampleBufferDisplayLayer < /code>, когда в фоновом режиме. < /P>
Я хочу < /h2>
сохранить avsamplebufferdisplaylayer < /code> Active, когда приложение входит в
br /> pipe-in picture-in picture. /> Автоматически скрыть AVSampleBufferDisplayLayer, когда приложение приходит к
на переднем плане. < /Li>
< /ul>
Что я попробовал < /h2>
AvsampleBufferDisplayLayer
Использование Agora SetParameters (
Код: Выделить всё
"{\"rtc.video.pip\": true}"
Нет влияния на включение режима PIP.
Обработка приложений. />
Как я могу продолжать рендеринг видеопотока Agora, используя
avsamplebufferdisplaylayer в заднем плане? /> идет на фоне и скрыть, когда приложение поступает на переднем плане < /p>
< /li>
< /ol>
Подробнее здесь: https://stackoverflow.com/questions/794 ... o-call-app