Tôi đang cố gắng đọc và ghi đồng thời tệp H.264 mov được viết bởi AVAssetWriter. Tôi quản lý để trích xuất các đơn vị NAL cá nhân, đóng gói chúng vào AVPackets của ffmpeg và ghi chúng vào một định dạng video khác bằng cách sử dụng ffmpeg. Nó hoạt động và tập tin kết quả phát tốt ngoại trừ tốc độ phát lại không đúng. Làm cách nào để tính giá trị PTS/DTS chính xác từ dữ liệu H.264 thô? Hoặc có thể có một số cách khác để có được chúng?Nhận PTS từ nguyên mẫu H264 mdat được tạo bởi iOS AVAssetWriter
Đây là những gì tôi đã cố gắng:
Giới hạn chụp min/tốc độ khung hình tối đa tới 30 và cho rằng các tập tin đầu ra sẽ là 30 fps. Trên thực tế, khung hình/giây của nó luôn nhỏ hơn giá trị tôi đặt. Và cũng có thể, tôi nghĩ rằng fps không phải là không đổi từ gói tin đến gói.
Hãy nhớ dấu thời gian trình bày của từng mẫu văn bản và giả định rằng các mẫu ánh xạ một-một cho NALUs và áp dụng dấu thời gian đã lưu vào gói đầu ra. Điều này không hoạt động.
Đặt PTS thành 0 hoặc AV_NOPTS_VALUE. Không hoạt động.
Từ googling về nó Tôi hiểu rằng dữ liệu H.264 thô thường không chứa bất kỳ thông tin thời gian nào. Nó đôi khi có thể có một số thông tin thời gian bên trong SEI, nhưng các tập tin mà tôi sử dụng không có nó. Mặt khác, có một số ứng dụng làm chính xác những gì tôi đang cố gắng làm, vì vậy tôi cho rằng nó có thể bằng cách nào đó.
Tôi cũng đang cố đọc đồng thời H.264 từ tệp mov được viết bởi AVAssetWriter và không thể làm điều đó bằng cách sử dụng đường ống/đọc tệp thông thường. Làm thế nào bạn quản lý để đọc nó trong khi nó đang được viết? Cảm ơn! –
Sử dụng đọc tập tin thường xuyên nhưng thay vì dừng lại trên EOF đọc lại. Sớm hay muộn hoạt động đọc của bạn sẽ thành công. – kolyuchiy
@kolyuchiy - các nguồn công văn tận dụng tốt hơn hệ thống. Thiết lập nguồn đọc trên bộ mô tả FILE. Một khối sẽ được gọi khi có dữ liệu được đọc. Nếu EOF xảy ra chỉ rõ ràng lỗi trên FILE của bạn. –