我想同時在多個視圖上呈現多個H264 mp4視頻。目標是閱讀約8個短視頻,每個視頻大小爲100x100像素,並讓他們同時在屏幕上的多個位置顯示其內容。iOS視頻:可以同時使用4個以上AVAssetReader?
想象一下屏幕上的24個方塊,每個顯示8個視頻池中的一個視頻。
MoviePlayer不起作用,因爲它只顯示一個全屏視頻。具有多個AVPlayerLayers的AVPlayer是有限的,因爲只有最近創建的圖層將在屏幕(根據文檔和我的測試)上顯示它的內容。
因此,我寫了一個簡短的視頻類,併爲我的包中的每個.mp4文件創建了一個實例,使用AVAssetReader讀取它的內容。在更新時,根據視頻的幀率,每個視頻幀都會被轉換爲UIImage並顯示。此外,這些圖像被緩存以便在循環中快速訪問。
- (id) initWithAsset:(AVURLAsset*)asset withTrack:(AVAssetTrack*)track
{
self = [super init];
if (self)
{
NSDictionary* settings = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA], (NSString*)kCVPixelBufferPixelFormatTypeKey, nil];
mOutput = [[AVAssetReaderTrackOutput alloc] initWithTrack:track outputSettings:settings];
mReader = [[AVAssetReader alloc] initWithAsset:asset error:nil];
[mReader addOutput:mOutput];
BOOL status = [mReader startReading];
}
return self;
}
- (void) update:(double)elapsed
{
CMSampleBufferRef buffer = [mOutput copyNextSampleBuffer];
if (buffer)
{
UIImage* image = [self imageFromSampleBuffer:sampleBuffer];
}
[...]
}
其實這個作品相當不錯,但只適用於4個視頻。第五個從不出現。首先,我想到了記憶的問題,但我測試了以下設備:
- iPhone 3GS
- iPhone 4
- iPad的
- iPad 2的
我上有相同的行爲每個設備:4個視頻以平穩循環播放,沒有差異。
如果這將是一個內存問題,我會期望至少iPad 2顯示5或6個視頻(由於它是更好的硬件),或3GS只顯示1或崩潰的地方。
雖然模擬器顯示所有視頻。
在裝置顯示調試,即
BOOL status = [mReader startReading];
返回false用於視頻5,6,7和8
因此,有某種硬件設置(或限制),其沒有按」允許4個以上的AVAssetReaders?因爲,我無法真正解釋這種行爲。我不認爲所有設備都具有完全相同數量的視頻內存。
它更可能比顯存H.264解碼芯片的限制。 – 2011-05-30 02:22:39
你解決了這個問題嗎?我正在經歷同樣的行爲 – 2011-11-07 01:42:12