2010-12-03 5 views
1

J'écris une application de montage vidéo interactive qui utilise Quartz Composer comme un processeur vidéo en temps réel. L'heure et la synchronisation sont très importantes dans mon application. Ma première application codée en C++ doit envoyer des commandes comme "play" à ce "chemin" "ce fichier vidéo" "start" à cette "heure" "stop", etc. Pour que ces prises udp fonctionnent bien . J'utilise une socket pour chaque commande afin que l'ordre de la commande ne soit jamais gâché, une telle chose sera fatale! Le vrai problème est quand mon Patch Quartz Composer commence à envoyer l'heure actuelle à ma deuxième application qui contrôlera la barre de mon timeline afin que l'utilisateur ait une représentation graphique de l'avance réelle de la vidéo là les prises UDP sont juste pas assez rapide et envoyer des paquets dans un ordre différent ou des duplications. Je pensais que ce domaine socket unix pourrait m'aider mais quand j'ai regardé tous les exemples que j'ai trouvé sur le web où écrit en C et non en objC et les plugins de Quartz Composer ne peuvent être codés en objC je sais que je pourrais Envelopper le code C moi-même mais avant de commencer cette tâche herculéenne comment être sûr que le socket Unix est ce dont j'ai besoin?Unix Domain Sockets, Udp Sockets Objectif C quoi utiliser?

Le socket Unix est-il vraiment rapide et fiable pour ce que j'essaie de faire? Y a-t-il une autre façon que vous savez pour le processus de synchronisation dans objC? J'ai des tubes de recherche, de la mémoire partagée mais je ne vois pas comment implémenter cela dans mon plug-in.

+0

Par "J'utilise une socket pour chaque commande", voulez-vous dire que vous ouvrez une nouvelle socket à chaque fois? Et vous utilisez UDP pour IPC local (sur une seule machine)? Et vous vous demandez si les sockets de domaine Unix sont assez rapides? –

+0

Oui j'utilise UDP pour la machine locale Je me demande si les sockets de domaine Unix sont assez rapides pour envoyer par exemple des mises à jour 25/s ou 30/s à mon interface graphique dans l'autre application UDP reste bloqué ... Oui j'utilise un sockets pour chaque commande que j'envoie à l'application vidéo un pour dire jouer un pour dire arrêter un pour régler l'heure de début de la vidéo etc – Nairo

Répondre

0

Oui j'utilise UDP pour la machine locale je me demande si les sockets de domaine Unix sont assez rapidement pour envoyer par exemple 25/s ou 30 s/mises à jour de mon interface graphique dans le autre UDP demande obtient juste coincé ...

sockets Unix pourraient être un peu plus vite, et ils fournissent probablement plus important livraison fiable (contrairement à UDP). Mais votre commentaire sur la vitesse, et l'idée que UDP en tant que protocole vous empêche d'afficher 30 mises à jour par seconde à une interface graphique, me fait penser que le problème n'est pas dans le choix du protocole, mais ailleurs. En d'autres termes, je pense que les sockets Unix seront plus rapides que UDP, mais je doute qu'ils vont résoudre votre problème réel.

+0

Merci pour la réponse john Vous avez raison, j'ai exprimé vaguement dans mon dernier message. Ce que je voulais dire, c'est que j'utilise Udp Sockets pour synchroniser mon interface graphique avec un processus d'une autre application et connaissant les problèmes de fiabilité de ce protocole, je préfère utiliser Unix Domain Sockets à la place. Un problème est que les exemples que j'ai trouvés comme le CFLocalServer d'Apple sont écrire en C et les applications que j'utilise seulement permettent d'utiliser Objective-C pour coder le plugin, comment puis-je créer des Unix-sockets en objectif -c? – Nairo

+0

Dans ce cas, je vous invite à utiliser TCP pour le moment. Il devrait être une transition très facile de UDP, avec beaucoup de bonne documentation et de soutien pour vous guider. Les sockets Unix peuvent devenir nécessaires à l'avenir, mais la migration d'UDP vers TCP ne servira à vous préparer à cette transition que si cela s'avère nécessaire.Mais franchement, je soupçonne TCP de résoudre les problèmes de fiabilité que vous avez vus avec UDP sans nuire à votre produit du tout. Je dis garder les choses simples, du moins jusqu'à ce que le simple ne soit pas assez bon. –