Как я могу поделиться звуковым файлом, на Facebook или Twitter в iPhone - PullRequest
1 голос
/ 28 февраля 2012

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

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

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

Ответы [ 5 ]

0 голосов
/ 26 апреля 2016

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

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

- (IBAction)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 <FBSDKShareKit/FBSDKShareKit.h>

Затем мы передаем объединенный файл в 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, а затем позволяют пользователю поделиться своим аудиофайлом на своей стене с фоном видео, сохраненного в вашем приложении.

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

0 голосов
/ 19 февраля 2013

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

0 голосов
/ 28 февраля 2012

Если вы проверяете веб-приложения на наличие твиттера / фейсбука, они не предоставляют никаких средств для ЗАГРУЗКИ аудиофайла.

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

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

0 голосов
/ 28 февраля 2012

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

0 голосов
/ 28 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...