GData youtube视频上传丢失的音频

时间:2011-09-29 12:42:03

标签: iphone video upload youtube gdata

我正在使用GData Api从ios应用程序上传YouTube上的视频。 它成功上传了视频,但音频丢失了。

我正在使用.mp4格式的视频。 有人有线索吗?

由于

-(BOOL) setupWriter{
    NSError *error = nil;
//  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//  NSString *documentsDirectory = [paths objectAtIndex:0];
//  NSURL * url = [NSURL URLWithString:documentsDirectory];
//  url = [url URLByAppendingPathComponent:@"om.mp4"];


    //  NSString *path = [documentsDirectory stringByAppendingPathComponent:@"om.mp4"];
    //  [data writeToFile:path atomically:YES];


NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/movie.mp4"]];
_videoWriter = [[AVAssetWriter alloc] initWithURL:[NSURL fileURLWithPath:path] fileType:AVFileTypeQuickTimeMovie
                                            error:&error];
NSParameterAssert(_videoWriter);


    // Add video input
NSDictionary *videoCompressionProps = [NSDictionary dictionaryWithObjectsAndKeys:
                                       [NSNumber numberWithDouble:128.0*1024.0], AVVideoAverageBitRateKey,
                                       nil ];

NSDictionary *videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                               AVVideoCodecH264, AVVideoCodecKey,
                               [NSNumber numberWithInt:192], AVVideoWidthKey,
                               [NSNumber numberWithInt:144], AVVideoHeightKey,
                               videoCompressionProps, AVVideoCompressionPropertiesKey,
                               nil];

_videoWriterInput = [[AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo
                                                        outputSettings:videoSettings] retain];


float   angle = M_PI/2;  //rotate 180°, or 1 π radians
_videoWriterInput.transform = CGAffineTransformMakeRotation(angle);


NSParameterAssert(_videoWriterInput);
_videoWriterInput.expectsMediaDataInRealTime = YES;


    // Add the audio input
AudioChannelLayout acl;
bzero( &acl, sizeof(acl));
acl.mChannelLayoutTag = kAudioChannelLayoutTag_Mono;


NSDictionary* audioOutputSettings = nil;          
    // Both type of audio inputs causes output video file to be corrupted.
if( NO ) {
        // should work from iphone 3GS on and from ipod 3rd generation
    audioOutputSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                           [ NSNumber numberWithInt: kAudioFormatMPEG4AAC ], AVFormatIDKey,
                           [ NSNumber numberWithInt: 1 ], AVNumberOfChannelsKey,
                           [ NSNumber numberWithFloat: 44100.0 ], AVSampleRateKey,
                           [ NSNumber numberWithInt: 64000 ], AVEncoderBitRateKey,
                           [ NSData dataWithBytes: &acl length: sizeof( acl ) ], AVChannelLayoutKey,
                           nil];
} else {
        // should work on any device requires more space
    audioOutputSettings = [ NSDictionary dictionaryWithObjectsAndKeys:                       
                           [ NSNumber numberWithInt: kAudioFormatAppleLossless ], AVFormatIDKey,
                           [ NSNumber numberWithInt: 16 ], AVEncoderBitDepthHintKey,
                           [ NSNumber numberWithFloat: 44100.0 ], AVSampleRateKey,
                           [ NSNumber numberWithInt: 1 ], AVNumberOfChannelsKey,                                      
                           [ NSData dataWithBytes: &acl length: sizeof( acl ) ], AVChannelLayoutKey,
                           nil ];
} 

_audioWriterInput = [[AVAssetWriterInput 
                      assetWriterInputWithMediaType: AVMediaTypeAudio 
                      outputSettings: audioOutputSettings ] retain];

_audioWriterInput.expectsMediaDataInRealTime = YES;




    // add input
[_videoWriter addInput:_videoWriterInput];
[_videoWriter addInput:_audioWriterInput];

return YES;
}

这是我用来捕获音频的设置编写器是在这个????

中扭曲的东西

2 个答案:

答案 0 :(得分:2)

来自CamStudio Support Forum

  

.MOV / .MP4 / .3GPP文件

     

MOV / MP4 / 3GPP文件是基于索引的。简单地说,这意味着   文件中有一个索引告诉我们具体的位置   视频和音频帧存在于文件中的哪个位置。没有   索引,几乎不可能知道具体的数据在哪里   视频或音频帧是。该索引包含在所谓的a中   文件中的'moov'原子。

     

现在,如果索引位于文件的开头,则会启用   当文件的连续字节为时,处理视频   上传。另一方面,如果索引在最后,则处理   视频无法在整个上传完成之后开始 - 因为   解释文件需要索引。

     

因此,对于MOV / MP4 / 3gpp文件,我们更喜欢“moov”原子   文件的开头 - 也称为“快速启动”MP4 / MOV文件。   网上有一些工具可以压缩你的MOV文件。平时   视频编辑/导出软件将有选项来创建您的   在开头而不是你的结尾使用moov原子的文件   文件。如果您使用的是Apple编辑工具,请参阅此文章   如何制作“快速启动”MP4 / MOV文件./p>

     

以下列出了YouTube支持的一些众所周知的格式:

     

WebM文件 - Vp8视频编解码器和Vorbis音频编解码器

     

.MPEG4,3GPP和MOV文件 - 通常支持h264,mpeg4视频   编解码器和AAC音频编解码器

     

.AVI - 许多相机输出这种格式 - 通常是视频编解码器   MJPEG和音频是PCM

     

.MPEGPS - 通常支持MPEG2视频编解码器和MP2音频

     

.WMV

     

.FLV - Adob​​e-FLV1视频编解码器,MP3音频

答案 1 :(得分:1)

过去几天我一直在使用GData API,没有类似的问题。我建议您查看Youtube支持的文件类型:http://www.google.com/support/youtube/bin/answer.py?answer=55744。你能验证你上传的文件实际上有音频吗? Quicktime对音频曲目的格式有何看法? Youtube建议使用AAC(据我所知)。