Bạn chỉ có thể nhận được hình ảnh video thô ở định dạng màu BGRA hoặc YUV từ AVFoundation. Tuy nhiên, khi bạn viết những khung hình đó vào một mp4 qua AVAssetWriter, chúng sẽ được mã hóa bằng cách sử dụng mã hóa H264.
Một ví dụ điển hình với mã trên làm thế nào để làm điều đó là RosyWriter
Lưu ý rằng sau mỗi lần AVAssetWriter ghi, bạn sẽ biết rằng một hoàn H264 NAL được ghi vào một mp4. Bạn có thể viết mã đọc toàn bộ H264 NAL sau mỗi lần ghi bởi AVAssetWriter, nó sẽ cho phép bạn truy cập vào một khung mã hóa H264. Nó có thể mất một chút để làm cho nó đúng với tốc độ khá, nhưng nó là doable (tôi đã làm nó thành công).
Nhân tiện, để giải mã thành công các khung video được mã hóa này, bạn sẽ cần thông tin SPS và PPS H264 nằm ở một vị trí khác trong tệp mp4. Trong trường hợp của tôi, tôi thực sự tạo ra một vài tập tin mp4 thử nghiệm, và sau đó tự giải nén chúng ra. Vì những thay đổi đó không thay đổi, trừ khi bạn thay đổi thông số mã hóa H264, bạn có thể sử dụng chúng trong mã của bạn.
Kiểm tra bài đăng của tôi tới SPS values for H 264 stream in iPhone để xem một số SPS/PPS tôi đã sử dụng trong mã của mình.
Chỉ cần lưu ý cuối cùng, trong trường hợp của tôi, tôi phải truyền các khung được mã hóa h264 đến điểm cuối khác để giải mã/xem; vì vậy mã của tôi phải làm điều này nhanh chóng.Trong trường hợp của tôi, nó tương đối nhanh; nhưng cuối cùng tôi chuyển sang VP8 để mã hóa/giải mã chỉ vì nó nhanh hơn vì mọi thứ đã được thực hiện trong bộ nhớ mà không cần đọc/ghi tệp.
Chúc may mắn và hy vọng thông tin này sẽ hữu ích.