2008-12-01 7 views
3

J'essaye de construire un magnétoscope sans jailbreaker mon iPhone (j'ai une licence de développeur). J'ai commencé à utiliser le framework privé PhotoLibrary, mais je ne peux atteindre que 2ftp (trop lent). Cycoder application a un fps de 15, je pense qu'il utilise une approche différente. J'ai essayé de créer un bitmap à partir du previewView du CameraController, mais il renvoie toujours le bitmap noir.Tampon vidéo iPhone

Je me demande s'il existe un moyen d'accéder directement au tampon vidéo, peut-être avec le framework IOKit.

Merci Marco

Répondre

0

Si vous avez l'intention de libérer jamais votre application sur l'App Store, en utilisant un cadre privé garantira qu'il sera rejeté. La vidéo, utilisant le SDK, n'est tout simplement pas supportée.

0

Pour capturer la vidéo, vous pouvez voir quand la caméra est active nécessite des techniques assez sophistiquées, pas exposés par un cadre/lib-out-of-the-box.

0

J'ai utilisé une méthode UIWindow non documentée pour obtenir le cadre affiché en cours comme CGImageRef. Maintenant, cela fonctionne avec succès !!

Si vous voulez, et si je suis autorisé, je peux poster le code qui fait l'affaire.

Marco

1

Voici le code:

image = [window _createCGImageRefRepresentationInFrame:rectToCapture]; 

Marco

1

C'est le gros problème. Jusqu'à présent, j'ai résolu en utilisant des tampons de taille fixe temp et détacher un thread pour chaque tampon quand il est plein. Le thread va enregistrer le contenu du tampon dans la mémoire Flash. Lancer des fils lourds, car chaque thread accède au flash, ralentit l'appareil et rafraîchit la vue de la caméra. Les tampons ne peuvent pas être grands, car vous obtiendrez un avertissement de mémoire, et ne peut pas être petit car vous ferez geler l'appareil, à cause de trop de threads et d'accès à la mémoire flash à la fois. La solution réside dans la taille du tampon d'équilibrage et le nombre de threads.

Je n'ai pas déjà essayé d'utiliser sqlite3 db pour stocker des images de données binaires, mais je ne sais pas si ce sera une meilleure solution. PS: pour accélérer l'appel des méthodes de classe, évitez la solution commune [méthode objet] en raison du fonctionnement de l'appel de méthode, mais essayez d'obtenir et d'enregistrer l'adresse de la méthode comme indiqué ci-dessous.

De Apple ObjC doc:

« L'exemple ci-dessous montre comment la procédure qui met en œuvre la setFilled: méthode pourrait être appelé:

void (*setter)(id, SEL, BOOL); 
int i; 
setter = (void (*)(id, SEL, BOOL))[target methodForSelector:@selector(setFilled:)]; 
for (i = 0; i < 1000, i++) 
setter(targetList[i], @selector(setFilled:), YES); " 

Marco

Questions connexes