2012-12-10 70 views
1

我爲ios製作了基於FFMPEG的播放器。它可以在模擬器上正常工作,但在實際設備上(iPhone 4),幀速率較低並且使音頻和視頻不同步。該播放器在iPhone 4上運行良好,所以我想這只是設備計算能力的問題。如何使用硬件解碼來構建針對iOS優化的ffmpeg?

那麼,有沒有建立爲iOS設備優化的FFMPEG(armv7,arvm7s拱)?或者有沒有利用ios設備硬件來解碼視頻流?

我的視頻流在H264/AAC中編碼。

回答

2

這些流應該玩的很好,我假設你使用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; 
} 

有一個缺點,現在是一個方法需要確定其被寫入讀取編碼數據,相信我,當我說,有我們幾個開發商當我們寫這篇文章時,試圖弄清楚如何做到這一點。

+0

您是否爲視頻解碼AVFoundation?如果您的視頻是h264/aac,那麼使用ffmpeg進行解碼的原因是什麼? – jAckOdE

+0

你說你使用的是基於ffmpeg的播放器 –

+0

是的,我確實實現了預緩衝和GPU加速色彩空間轉換,但幀頻仍然很低(15〜23 fps,在ip4上測試),所以我想到了其他替代方案。由於我們的視頻只包含H264/AAC流,因此使用AVFoundation提供的硬件解碼可能是一個不錯的選擇。 AVFoundation在解碼h264/aac流時明顯比ffmpeg提供更好的性能,所以我認爲你必須有特殊的理由使用ffmpeg而不是AVFoundation? – jAckOdE