我正在使用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;
}
这是我用来捕获音频的设置编写器是在这个????
中扭曲的东西答案 0 :(得分:2)
.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 - Adobe-FLV1视频编解码器,MP3音频
答案 1 :(得分:1)
过去几天我一直在使用GData API,没有类似的问题。我建议您查看Youtube支持的文件类型:http://www.google.com/support/youtube/bin/answer.py?answer=55744。你能验证你上传的文件实际上有音频吗? Quicktime对音频曲目的格式有何看法? Youtube建议使用AAC(据我所知)。