2015-12-22 14 views
5

Tôi đang tạo tính năng xuất video cho một trong các ứng dụng của mình. Về bản chất, video là một trong sáu hình ảnh khác nhau kéo dài trong các khoảng thời gian khác nhau (ngắn).Lỗi OSStatus không xác định -16364 khi sử dụng AVAssetWriter

Xuất hoạt động tốt khi tôi xuất nội dung có chứa 283 hình ảnh có thời lượng khác nhau, nhưng khi tôi cố gắng xuất một trong 803, tôi gặp phải lỗi "Không thể hoàn tất thao tác" (AKA) chỉ cần thổi lên vì báo cáo lỗi AVFoundation là khủng khiếp ").

Khi tôi cố gắng thêm khung 754 (luôn khung 754) sử dụng tôi AVAssetWriterInputPixelBufferAdaptor, appendPixelBuffer:withPresentationTime: lợi nhuận NO, trạng thái 's AVAssetWriter được thất bại và lỗi của nó là thế này:

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x17ab2050 {Error Domain=NSOSStatusErrorDomain Code=-16364 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-16364)} 

tôi không thể cho cuộc sống của tôi tìm ra lỗi cơ bản (OSStatus -16364) là gì. www.osstatus.com không có ý tưởng, macerror nói không có điều như vậy tồn tại, và this Kịch bản lệnh Python để tìm kiếm tiêu đề SDK không tìm thấy gì. Nó cũng không phải là một mã bốn ký tự giống như một số lỗi OSStatus (trừ khi tôi sai lầm khi kiểm tra điều này).

Tôi đã loại trừ mọi nguyên nhân phổ biến của lỗi "Không thể hoàn tất thao tác" mà tôi đã tìm thấy. Nó không liên quan đến quyền hoặc ghi đè hệ thống tập tin, không có hai cuộc gọi nào là appendPixelBuffer có cùng thời gian trình bày.

Nó không phải là một điều bộ nhớ (sử dụng bộ nhớ vẫn bằng phẳng ở 165MB trong khi xuất video), và CPU vẫn gần 3%.

Nếu nó quan trọng, tôi sử dụng lại 6 CVPixelBuffer s cùng một lần cho 6 hình ảnh thay vì tạo hình ảnh mới từ UIImage mỗi lần. Điều này dường như để giúp thực hiện, và thay đổi nó để những cái mới mỗi lần dường như không thay đổi bất cứ điều gì (ngoại trừ làm cho nó thất bại trên khung 753 thay vào đó), nhưng ai biết được.

Có ai có ý tưởng gì về điều này không?

+0

có thể điều này sẽ giúp bạn https://github.com/BradLarson/GPUImage/issues/2135 – azimov

+0

@azimov: Tôi không sử dụng GPUImage, nhưng có thể việc sửa lỗi liên quan đến công cụ phân luồng sẽ đưa tôi đến một nơi nào đó. Cảm ơn. – Linuxios

+0

Có, tôi thấy nó không giống nhau, nhưng tác giả đang chỉ AVAssetWriter trong bình luận của mình, và anh ta nhận được mã lỗi giống như bạn. – azimov

Trả lời

7

OK. Cuối cùng đã tìm ra điều này.

Do làm tròn (làm tròn các giá trị thời lượng nhỏ vào khoảng thời gian 30 FPS, khiến chúng trở thành 0/30), appendPixelBuffer:withPresentationTime: đã được gọi hai lần với cùng một tình huống cụ thể là presentationTime. AVFoundation không để ý vấn đề cho đến 7 khung hình sau khi nó ném lỗi:

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x17ab2050 {Error Domain=NSOSStatusErrorDomain Code=-16364 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-16364)} 

Sử dụng 60 FPS ở vị trí của 30 FPS ngăn chặn tình hình đặc biệt này từ làm tròn đến một khoảng thời gian không, nhưng giải pháp chung là để thả khung có thời lượng được làm tròn thành 0.

+0

nice - boo để thông báo lỗi 'AVFoundation'. bạn có thể chấp nhận câu trả lời của bạn không? –

+0

@RhythmicFistman: Xong. Bạn biết đấy, việc duy trì hai ứng dụng bằng AVFoundation là một cơn ác mộng. – Linuxios

+0

bạn đang gặp phải vấn đề gì? –

Các vấn đề liên quan