我爲ios製作了基於FFMPEG的播放器。它可以在模擬器上正常工作,但在實際設備上(iPhone 4),幀速率較低並且使音頻和視頻不同步。該播放器在iPhone 4上運行良好,所以我想這只是設備計算能力的問題。如何使用硬件解碼來構建針對iOS優化的ffmpeg?
那麼,有沒有建立爲iOS設備優化的FFMPEG(armv7,arvm7s拱)?或者有沒有利用ios設備硬件來解碼視頻流?
我的視頻流在H264/AAC中編碼。
我爲ios製作了基於FFMPEG的播放器。它可以在模擬器上正常工作,但在實際設備上(iPhone 4),幀速率較低並且使音頻和視頻不同步。該播放器在iPhone 4上運行良好,所以我想這只是設備計算能力的問題。如何使用硬件解碼來構建針對iOS優化的ffmpeg?
那麼,有沒有建立爲iOS設備優化的FFMPEG(armv7,arvm7s拱)?或者有沒有利用ios設備硬件來解碼視頻流?
我的視頻流在H264/AAC中編碼。
這些流應該玩的很好,我假設你使用ffmpeg你沒有使用iOS支持的視頻協議。
我們使用的ffmpeg做的RTSP/RTMP,我們得到了與H264/AAC不錯的表現
有許多因素促成AV /同步的問題,通常是某種類型的預緩衝的視頻所需要的,網絡也起着重要作用。
至於你的第二個問題,硬件編碼只能通過avfoundation,你可以使用avassetwriter來編碼你的視頻,但再次取決於你是否需要實時。
看到此鏈接https://github.com/mooncatventures-group/FFPlayer-beta1/blob/master/FFAVFrames-test/ViewController.m
-(void) startRecording {
// // create the AVComposition
// [mutableComposition release];
// mutableComposition = [[AVMutableComposition alloc] init];
movieURL = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%llu.mov", NSTemporaryDirectory(), mach_absolute_time()]];
NSError *movieError = nil;
assetWriter = [[AVAssetWriter alloc] initWithURL:movieURL
fileType: AVFileTypeQuickTimeMovie
error: &movieError];
NSDictionary *assetWriterInputSettings = [NSDictionary dictionaryWithObjectsAndKeys:
AVVideoCodecH264, AVVideoCodecKey,
[NSNumber numberWithInt:FRAME_WIDTH], AVVideoWidthKey,
[NSNumber numberWithInt:FRAME_HEIGHT], AVVideoHeightKey,
nil];
assetWriterInput = [AVAssetWriterInput assetWriterInputWithMediaType: AVMediaTypeVideo
outputSettings:assetWriterInputSettings];
assetWriterInput.expectsMediaDataInRealTime = YES;
[assetWriter addInput:assetWriterInput];
assetWriterPixelBufferAdaptor = [[AVAssetWriterInputPixelBufferAdaptor alloc]
initWithAssetWriterInput:assetWriterInput
sourcePixelBufferAttributes:nil];
[assetWriter startWriting];
firstFrameWallClockTime = CFAbsoluteTimeGetCurrent();
[assetWriter startSessionAtSourceTime:kCMTimeZero];
startSampleing=YES;
}
有一個缺點,現在是一個方法需要確定其被寫入讀取編碼數據,相信我,當我說,有我們幾個開發商當我們寫這篇文章時,試圖弄清楚如何做到這一點。
您是否爲視頻解碼AVFoundation?如果您的視頻是h264/aac,那麼使用ffmpeg進行解碼的原因是什麼? – jAckOdE
你說你使用的是基於ffmpeg的播放器 –
是的,我確實實現了預緩衝和GPU加速色彩空間轉換,但幀頻仍然很低(15〜23 fps,在ip4上測試),所以我想到了其他替代方案。由於我們的視頻只包含H264/AAC流,因此使用AVFoundation提供的硬件解碼可能是一個不錯的選擇。 AVFoundation在解碼h264/aac流時明顯比ffmpeg提供更好的性能,所以我認爲你必須有特殊的理由使用ffmpeg而不是AVFoundation? – jAckOdE