Неподдерживаемый формат IOSurface: 0x26424741 с использованием видео twilio в scenekit - PullRequest
0 голосов
/ 13 июня 2019

Я использую twilio для отправки видео и использую это видео в виде сцены в качестве текстуры. Но проблема в том, что он отлично работает с iPhone X, но он выдал эту ошибку Unsupported IOSurface format: 0x26424741 на iPhone XR и XS.

вот что я делаю:

Получить видео:

func subscribed(to videoTrack: TVIRemoteVideoTrack, publication: TVIRemoteVideoTrackPublication, for participant: TVIRemoteParticipant) {
    print("Participant \(participant.identity) added a video track.")
    let remoteView = TVIVideoView.init(frame: UIWindow().frame,
                                       delegate:self)
    videoTrack.addRenderer(remoteView!)
    delegate.participantAdded(with: remoteView!)
}

делегат:

func participantAdded(with videoView: UIView) {
    sceneView.addVideo(with: videoView)
}

и добавьте видео в плоскость:

func addVideo(with view: UIView){
    videoPlane.geometry?.firstMaterial?.diffuse.contents = view
}

1 Ответ

0 голосов
/ 18 июля 2019

Проблема была на самом деле с renderingType из remoteView.Для более старых устройств использование metal было бы хорошо, но для новых устройств требовалось openGLES.Я не знаю почему, но это было исправление.

Я использовал это решение, чтобы выяснить тип устройства.

Далее я определил, какой renderingType использовать

var renderingType: VideoView.RenderingType {
    get{
        let device = UIDevice()
        switch device.type{
        case .iPhoneXS:
            return .openGLES
        case .iPhoneXR:
            return .openGLES
        case .iPhoneXSMax:
            return .openGLES
        default:
            return .metal
        }
    }
}

И использовал его для инициализации remoteView

func didSubscribeToVideoTrack(videoTrack: RemoteVideoTrack, publication: RemoteVideoTrackPublication, participant: RemoteParticipant) {
    print("Participant \(participant.identity) added a video track.")
    let remoteView = VideoView.init(frame: UIWindow().frame,
                                    delegate:self,
                                    renderingType: renderingType)
    videoTrack.addRenderer(remoteView!)
    delegate.participantAddedVideo(for: participant.identity, with: remoteView!)
}
...