Wenn auf iOS ein Video kodiert, die meisten Lösungen um diesen Schritt:Warum müssen wir den Thread nach appendPixelBuffer anhalten: withPresentationTime :?
while(encoding) {
if(assetWriterInput.readyForMoreMediaData) {
[adaptor appendPixelBuffer:buffer withPresentationTime:presentTime];
if(buffer)
CVBufferRelease(buffer);
[NSThread sleepForTimeInterval:0.05]; // <=== This line slows down encoding
}
}
Wenn ich das Ergebnis Video ruckelt aussehen wird, auch den Faden nicht schlafen, wenn readyForMoreMediaData immer JA zurück. Wenn ich den Thread pausiere, sieht das Ergebnis perfekt aus.
Aber ich verstehe den Zweck von "readyForMoreMediaData" nicht, wenn wir den Thread trotzdem pausieren müssen? Es sieht so aus, als ob ich die Ruhezeit auf 0.03 reduzieren kann, ohne dass das Ergebnis ruckelnd wirkt, aber es verlangsamt immer noch den Kodierprozess.
Jede Hilfe wäre willkommen, danke!
Entschuldigung, ich hätte sagen sollen, dass ich OpenGL verwende, um Objekte zu zeichnen und das Ergebnis in ein Video zu kodieren. Ich benutze die Kamera oder ein vorhandenes Video nicht als Quelle. Ich brauche einen Adapter, weil ich einen pixelBufferPool brauche. Ich werde den "recommendedVideoSettingsForAssetWriterWithOutputFileType" versuchen. – Xys
Dank Ich denke recommendedVideoSettingsForAssetWriterWithOutputFileType nur für „AVCaptureVideoDataOutput“ ist, aber ich nicht verwenden diese – Xys
Wenn Sie mehr Code sehen wollen, hier ist ein Beitrag erklärt es: https://stackoverflow.com/a/9704392/5120292 – Xys