Jusqu'à présent, je sais comment diffuser une vidéo et comment le télécharger et ensuite de les lire, mais voici le problème: streaming une fois, les stocker sur l'appareil et dans le futur jeu de l'appareil.
Est-ce possible?
Jusqu'à présent, je sais comment diffuser une vidéo et comment le télécharger et ensuite de les lire, mais voici le problème: streaming une fois, les stocker sur l'appareil et dans le futur jeu de l'appareil.
Est-ce possible?
Il est très facile d'enregistrer la vidéo. Faire quelque chose de similaire à ceci:
//Saving Movie
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:*MovieObject* forKey:@"MovieObjectDataKey"];
[archiver finishEncoding];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"MovieObjectDefaultsDataKey"];
[archiver release];
[data release];
//Retrieving movie
NSData *savedMovieData = [[NSUserDefaults standardUserDefaults] objectForKey:@"MovieObjectDefaultsDataKey"];
if (savedMovieData != nil) {
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:savedMovieData];
*MovieObject* = [[unarchiver decodeObjectForKey:@"MovieObjectDataKey"] retain];
[unarchiver finishDecoding];
[savedMovieData release];
[unarchiver release];
} else {
//Download Stream of Your Movie
}
La seule chose que vous avez vraiment changer on est * MovieObject *, une fois dans chaque étape.
Pas tout à fait sûr ici comment vous obtenez votre flux, mais regardez dans le AVAssetWriter, AVAssetWriterInput et AVAssetWriterPixelBufferAdaptor et dès que vous recevez des données, vous devriez être en mesure d'ajouter les données à la de la pixels de la mémoire tampon de l'adaptateur à l'aide de:
appendPixelBuffer:withPresentationTime:
pas sûr que cela fonctionne pour vous, mais avec quelques embêtez-vous devriez être en mesure d'adapter votre entrée à la hauteur de cette méthode. Il y a beaucoup d'exemple de code pour la mise en place de l'écrivain
Je sais ce que vous voulez atteindre, j'ai seulement eu une solution de contournement. J'ai eu à mettre en œuvre le même comportement, et qui finit avec le streaming de la vidéo à partir du serveur et de le télécharger à côté de streaming. La prochaine fois que l'utilisateur essaie de diffuser la vidéo de déterminer s'il a été téléchargé sur le disque, sinon il coule de nouveau. Dans un cas normal, la vidéo a été téléchargée correctement et pourrait être revu en mode hors connexion.
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:somePath];
et
fileURLWithPath:isDirectory:
Initialise et retourne une nouvelle NSURL objet comme une URL de fichier avec un chemin d'accès spécifié.
+ (id)fileURLWithPath:(NSString *)path isDirectory:(BOOL)isDir
Paramètres
chemin
Le chemin que le NSURL objet de représenter. chemin d'accès doit être valide chemin d'accès système. Si le chemin commence par un tilde, il doit d'abord être étendu avec des stringByExpandingTildeInPath. Si un chemin est un chemin relatif, il est considéré comme relatif au répertoire de travail courant. En passant néant pour ce paramètre génère une exception.
isDir
Une valeur Booléenne qui spécifie si le chemin est traité comme un chemin de répertoire lors de la résolution contre le chemin d'accès relatif des composants. Col OUI si le chemin d'accès indique un répertoire, PAS le contraire. Valeur De Retour Un NSURL objet initialisé avec chemin d'accès.
Disponibilité
Disponible dans iOS 2.0 et versions ultérieures.
Vous ne pouvez pas les lire et enregistrer en même temps, surtout avec la vidéo de gros fichiers comme la Pomme doc sais que vous devez utiliser un flux de transport pour la diffusion HTTP en Direct.
ASIHttpRequest peut rendre votre vie plus facile.
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadDestinationPath:@"video.m4v"]; // use [NSBundle mainBundle] to find a better place
À partir de votre délégué, le gérer:
- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data;
Faire ce que les données de transcodage avec data
comme vous l'obtenir et de le pousser hors de votre AVAssetWriter
ou acteur de cinéma couche en temps réel, tout ce que vous utilisez. Lorsque vous avez terminé, l'actif doit toujours être enregistrés de sorte que vous pouvez l'obtenir plus tard.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.