2013-02-14 4 views
0

J'ai deux appareils iOS, et les deux ont une copie de la même vidéo. Les deux appareils communiquent via Bluetooth. La vidéo ne joue que sur un appareil tandis que l'autre est la télécommande. Le dispositif de "télécommande" a besoin d'un scrubber indiquant où se trouve la vidéo.Garder une scrubber sur un appareil en synchronisation avec une vidéo en cours de lecture sur un autre

Quelle est la meilleure façon de synchroniser la scrubber avec la lecture de la vidéo? J'utilise AVPlayer pour lire la vidéo et Gamekit pour la connexion bluetooth.

+0

Obtenez le dispositif de joueur pour envoyer le maximum de l'emplacement actuel. Mettez à jour l'épurateur en fonction du temps pris et utilisez l'emplacement actuel pour régler l'emplacement de l'épurateur. Ensuite, tout ce que vous avez à faire est de répondre aux arrêts, pauses, redémarrages, etc. Comment voulez-vous que le contrôle soit à l'amende, l'épurateur doit-il contrôler la position de lecture vidéo ou doit-il simplement indiquer l'emplacement? – Bergasms

+0

Il doit indiquer l'emplacement et être contrôlé. L'appareil jouant la vidéo n'a aucun contrôle. Le dispositif de "télécommande" démarrerait/arrêterait la vidéo. Le problème dont je ne suis pas sûr est la latence du réseau - au moment où le dispositif de contrôle à distance dit jouer, il y a le temps de recevoir le message et le temps de commencer à jouer. J'ai besoin que l'utilisateur ne remarque aucune anomalie. – Luke

Répondre

0

heh, eh bien, ce sera amusant de travailler. La latence est quelque chose que vous aurez toujours, donc vous avez besoin de stratégies d'atténuation. Je suggérerais d'examiner certaines façons dont les gens traitent de décalage. Une chose que je peux suggérer est de diviser vos deux types de message en critique et non critique. Ainsi, par exemple, une commande stop/pause/play/restart serait pour moi, être critique. Vous voulez que ce message passe, et vous continuerez à essayer jusqu'à ce qu'il le fasse.

Les messages tels que le changement de la position du filtre, dans les deux sens (lecteur à distance, lecteur à distance), ne sont pas critiques. Vous les envoyez, mais vous ne devriez pas perdre de temps à traiter les réponses ou à vous assurer qu'elles sont livrées. Semblable à la différence entre UDP et TCP. Celles-ci seront simplement envoyées sur la connexion, et je voudrais essentiellement que le paquet ne soit pas plus compliqué que (scrubberposition, position_as_time, identifier_number). Enregistrez le dernier numéro d'identifiant que vous avez reçu (le numéro d'identification est un nombre monotone croissant) et supprimez tous les messages dont le numéro est inférieur à celui-ci, mettez à jour la position pour les numéros supérieurs et mettez à jour votre numéro d'identificateur enregistré.

J'espère que cela a du sens/aide, permettez-moi de savoir si je dois d'expliquer quoi que ce soit de plus, et bonne chance

+0

Dois-je utiliser addPeriodicTimeObserverForInterval du côté du lecteur et envoyer un message UDP pour chaque mise à jour, ou dois-je utiliser un NSTimer sur le côté distant pour simuler le déplacement du curseur et effectuer éventuellement de petites corrections? Lors de l'utilisation de addPeriodicTimeObserverForInterval, je pense qu'il y avait environ 1000 messages pour une vidéo de 5 secondes. – Luke

+0

Vous prob n'a pas besoin d'envoyer autant de messages. Les gens ne seront pas en mesure de faire la différence entre l'épurateur qui passe de 50 mises à jour en 5 secondes, et encore moins 1000. Vous devrez probablement expérimenter sur la meilleure façon de le faire. Mon seul mot serait, ne pas permettre à l'épurateur de reculer sauf si le rembobinage est activé. Les gens ne remarqueront pas si l'épurateur ralentit ou s'interrompt de temps à autre, mais ils remarqueront si cela revient en arrière alors que ce ne devrait pas être le cas. votre solution devra utiliser une combinaison des deux. En outre, Bluetooth utilise la puissance, donc la limitation des messages est une bonne idée. – Bergasms

+0

Je viens de réaliser que vous êtes capable de personnaliser l'intervalle de addPeriodicTimeObserverForInterval. Je regardais AVPlayerDemo. L'exemple de code ajuste l'intervalle en fonction de la largeur du curseur et de la longueur de la vidéo. Plus la vidéo est longue, plus l'intervalle est long. Il semble qu'avec des vidéos plus courtes, vous obtenez des intervalles plus fréquents. Je viens de faire MAX (0.25f, intervalle), par exemple. D'autres tests montreront ce que la valeur devrait être. – Luke

Questions connexes