Реализовать режим PIP для моего приложения Video Call AgoraIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Реализовать режим PIP для моего приложения Video Call Agora

Сообщение Anonymous »

Problem
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 
не поддерживает PIP, я попытался завершить его в AvPlayerLayer , но это не сработало.
Использование Agora SetParameters (

Код: Выделить всё

"{\"rtc.video.pip\": true}"
)
Нет влияния на включение режима PIP.
Обработка приложений. />
Как я могу продолжать рендеринг видеопотока Agora, используя
avsamplebufferdisplaylayer в заднем плане? /> идет на фоне и скрыть, когда приложение поступает на переднем плане < /p>
< /li>
< /ol>

Подробнее здесь: https://stackoverflow.com/questions/794 ... o-call-app
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»