Как я могу поделиться звуковым файлом, с facebook или Twitter в iphone

Привет, я работаю над приложением, в котором я должен загрузить звуковой файл в Facebook.

Пожалуйста, предоставьте мне лучшее решение, можно ли разделить звуковой файл на Facebook или нет.

заранее спасибо

5 ответов

Это можно сделать, но это немного боль. Для этого вы должны преобразовать аудиофайл в видеофайл, а затем отправить его в Facebook как видео.

Сначала нам нужно иметь доступ к нашему аудиофайлу, у вас уже должно быть это, если нет, тогда есть много вопросов Stackoverflow, посвященных этому, я не буду усложнять ситуацию, уйдя с пути. Затем мы создаем NSURL для видео в наших документах. В этом случае у нас есть видео с именем video_base.mp4, которое было разработано как приятный фон для нашей звуковой дорожки. Наконец, мы объединяем файлы, прежде чем делиться возвращенным файлом на Facebook.

- (********)shareToFacebook:(id)sender {

 // You should already have your audio file saved
 NSString * songFileName = [self getSongFileName];

 NSArray * searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 NSString * documentPath = [searchPaths objectAtIndex:0];

 NSString * file = [documentPath stringByAppendingPathComponent:songFileName];
 NSURL * audioFileURL = [NSURL fileURLWithPath: audioFile];
 NSURL * videoFileURL = [NSURL fileURLWithPath:[NSFileManager getFilePath:@"video_base.mp4" withFolder:@""]];

 [self mergeAudio:audioFileURL andVideo:videoFileURL withSuccess:^(NSURL * url) {

 // Now we have the URL of the video file
 [self shareVideoToFacebook:url];
 }];
}

Приобретите @dineshprasanna для этой части кода, который можно найти здесь. Мы хотим объединить наши аудио и видео, а затем сохранить их на путь. Затем мы возвращаем exportURL в блок завершения.

- (void)mergeAudio: (NSURL *)audioURL andVideo: (NSURL *)videoURL withSuccess:(void (^)(NSURL * url))successBlock {

 AVURLAsset* audioAsset = [[AVURLAsset alloc]initWithURL:audioURL options:nil];
 AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:videoURL options:nil];

 AVMutableComposition * mixComposition = [AVMutableComposition composition];

 AVMutableCompositionTrack * compositionCommentaryTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio
 preferredTrackID:kCMPersistentTrackID_Invalid];
 [compositionCommentaryTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAsset.duration)
 ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]
 atTime:kCMTimeZero error:nil];

 AVMutableCompositionTrack *compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo
 preferredTrackID:kCMPersistentTrackID_Invalid];
 [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration)
 ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]
 atTime:kCMTimeZero error:nil];

 AVAssetExportSession* _assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition
 presetName:AVAssetExportPresetHighestQuality];

 NSString * videoName = @"export.mov";

 NSString * exportPath = [NSTemporaryDirectory() stringByAppendingPathComponent:videoName];
 NSURL * exportUrl = [NSURL fileURLWithPath:exportPath];

 if ([[NSFileManager defaultManager] fileExistsAtPath:exportPath]) {
 [[NSFileManager defaultManager] removeItemAtPath:exportPath error:nil];
 }

 _assetExport.outputFileType = @"com.apple.quicktime-movie";
 _assetExport.outputURL = exportUrl;
 _assetExport.shouldOptimizeForNetworkUse = YES;

 [_assetExport exportAsynchronouslyWithCompletionHandler: ^(void ) {
 if(successBlock) successBlock(exportUrl);
 }];
}

Наконец, мы хотим сохранить наш возврат videoURL в Facebook. Стоит отметить, что для этой функциональности необходимо добавить несколько библиотек:

#import <assetslibrary assetslibrary.h="">
#import <fbsdkcorekit fbsdkcorekit.h="">
#import </fbsdkcorekit></assetslibrary>

Затем мы передаем объединенный файл в Facebook:

- (void)shareVideoToFacebook: (NSURL *)videoURL {

 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
 ALAssetsLibraryWriteVideoCompletionBlock videoWriteCompletionBlock = ^(NSURL *newURL, NSError *error) {
 if(error) {
 NSLog( @"Error writing image with metadata to Photo Library: %@", error );
 } else {
 NSLog( @"Wrote image with metadata to Photo Library %@", newURL.absoluteString);

 FBSDKShareDialog *shareDialog = [[FBSDKShareDialog alloc]init];
 NSURL *videoURL = newURL;

 FBSDKShareVideo *video = [[FBSDKShareVideo alloc] init];
 video.videoURL = videoURL;

 FBSDKShareVideoContent *content = [[FBSDKShareVideoContent alloc] init];
 content.video = video;

 [FBSDKShareDialog showFromViewController:self
 withContent:content
 delegate:nil];
 }
 };

 if([library videoAtPathIsCompatibleWithSavedPhotosAlbum:videoURL]) {
 [library writeVideoAtPathToSavedPhotosAlbum:videoURL
 completionBlock:videoWriteCompletionBlock];
 }
}

Это должно открыть приложение Facebook, а затем разрешить пользователю делиться своим аудиофайлом на стене с фоном видео, хранящимся в вашем приложении.

Очевидно, что каждый проект отличается, это означает, что вы не сможете скопировать этот код прямо в свой проект. Я попытался разделить процесс, который должен быть легко экстраполирован для успешной загрузки аудио-сообщений.


Невозможно загрузить аудиофайлы в Facebook, разрешены только фотографии и видео. Однако другим решением было бы загрузить аудиофайл в другое место, а затем использовать API Facebook для публикации ссылки с использованием этой ссылки. Одно место, которое вы, возможно, захотите посмотреть, чтобы загрузить аудио, - http://developers.soundcloud.com/


если вы проверите webApps для twitter/facebook, они не предоставляют никаких средств для ЗАГРУЗКИ аудиофайла.

Twittier позволяет только текстовое сообщение, а с другой стороны, Facebook позволяет загружать изображение/видео.

В свете этих фактов я не думаю, что это возможно без доли url.


Используйте AVAssetExportSession, создайте фильм со звуковым файлом, а затем загрузите его в Facebook.


У Facebook нет загрузки звука. Вы всегда можете загружать звуковой файл в другое место и использовать Facebook для обмена ссылкой на него.

licensed under cc by-sa 3.0 with attribution.