8
votes

Affichage du contenu Avplayer sur deux vues simultanément

Je crée un client de streaming en direct HTTP pour Mac qui contrôlera la lecture vidéo sur un grand écran. Mon objectif est d'avoir une interface utilisateur de contrôle sur l'écran principal et de la vidéo en plein écran sur l'écran secondaire.

Utiliser l'avexte, j'ai été en mesure d'ouvrir le flux et de contrôler tous les aspects de mon interface utilisateur de contrôle, et je tente maintenant de dupliquer la vidéo sur un écran secondaire. Cela se révèle plus difficile que j'avais imaginé ...

sur l'écran de contrôle, j'ai une AVPlayerLayer qui affiche le contenu vidéo d'un Avplayer. Mon objectif était de créer une autre Avplayerlayer et d'envoyer le même joueur afin que les deux joueurs jouent la même vidéo simultanément dans deux vues différentes. Cependant, cela ne fonctionne pas.

creuser plus profondément, j'ai trouvé ceci dans les documents de l'AVFOUNDATION:

Vous pouvez créer des nombres arbitraires de couches de joueurs avec le même objet Avplayer. Seule la couche de joueur la plus récemment créée affichera en fait le contenu vidéo à l'écran.

Ceci est vraiment inutile pour moi, car j'ai besoin de la vidéo montrant correctement dans les deux points de vue.

Je peux créer une nouvelle instance d'AvplayerItem depuis le même avaiset, puis créer un nouvel Avplayer et l'ajouter à une nouvelle Avplayerlayer et avoir une vidéo apparaître, mais ils ne sont plus synchronisés car ils sont deux joueurs différents générant deux Streams audio jouant différentes parties du même flux.

Quelqu'un a-t-il des suggestions sur la façon d'obtenir le même contenu Avplayer en deux vues différentes? Peut-être une sorte de truc de miroir de calayer?


2 commentaires

Peut-être réduire la portée de votre question à refléter une calayeuse aidera à obtenir une réponse. Je n'ai aucune idée de toute façon.


Avez-vous déjà résolu cela?


3 Réponses :


4
votes

AVSyncronizedLayer peut aider. Je l'utilise différemment (pour synchroniser deux différents objets de média plutôt que le même) mais en principe, il doit être possible de charger le même article deux fois, puis d'utiliser une couche AVSyncronisée pour les tenir synchronisés.


0 commentaires

1
votes

Je vois que ce sujet a été très vieux, mais je pense que cela serait toujours utile. Vous avez écrit que

J'ai une Avplayerlayer qui affiche le contenu vidéo d'un Avplayer. Mon objectif était de créer une autre Avplayerlayer et d'envoyer le même joueur afin que les deux joueurs jouent la même vidéo simultanément dans deux vues différentes. Cependant, cela ne fonctionne pas.

Mais, ça marche. Je viens de l'essayer dans mon projet. Voici mon code d'initialisations de calque: xxx

et voici ce que j'ai obtenu:

 Entrez la description de l'image ici

Comme vous pouvez le constater, il y a deux AvplayerLayers en train de jouer le même Avplayeritem dans la synchronisation très parfaite


0 commentaires

1
votes

Les docs d'Apple affirment maintenant ceci:

Vous pouvez créer des nombres arbitraires de couches de joueurs avec le même objet Avplayer, mais vous devez limiter le nombre de couches que vous créez pour éviter d'avoir un impact sur les performances de lecture.

Lien vers Docs

Cela fonctionne également dans mon application aussi.


0 commentaires