AVPlayer
có một thuộc tính được gọi là rate
có nghĩa là để kiểm soát tốc độ phát lại. 1.0
là tốc độ bình thường trong khi các giá trị như 2.0
hoặc 5.0
sẽ phát lại ở 2x và 5x tương ứng.Làm thế nào để bạn có thể phát lại tốc độ cao mượt mà từ AVPlayer?
Bất cứ khi nào tôi đặt giá trị tốc độ phát lại cao hơn 1.0
(giả sử 10.0
), phát lại rất bị thay đổi và có vẻ như một số lượng lớn khung hình bị giảm xuống do trình phát không thể theo kịp.
Tuy nhiên, các giá trị giống nhau trong QuickTime Player (với cùng một bộ phim), phát lại mượt mà với tốc độ 2x, 5x, 10x, 30x and 60x
(như được báo cáo bởi Trình phát QuickTime).
Tôi đã tạo một ứng dụng OS X thử nghiệm không chứa gì hơn AVPlayerView
và hai nút để cài đặt tốc độ phát lại. Tốc độ 1.0
hoạt động như mong đợi, nhưng tỷ lệ 10.0
sẽ phát lại rất khó.
Tuy nhiên, AVPlayerView
có một đứa lẻ ở chỗ nếu bạn di chuột click vào dòng thời gian phát lại để tìm kiếm một vị trí khác (trong khi nó đang chơi ở 10x và choppy), sau đó các AVPlayerView
sẽ "sửa chữa" phát lại và bộ phim sẽ được chơi trơn tru ở mức 10x. Tất cả nó đã được nhấp vào thời gian phát lại.
Có ai biết cách phát lại mượt mà với các mức giá không phải là 1x không? Nó rõ ràng không phải là một vấn đề phần cứng hoặc một vấn đề kích thước tập tin bởi vì cả hai QuickTime Player và AVPlayerView có thể làm điều đó.
Nỗ lực
question Điều này cho thấy rằng nó có thể là một vấn đề âm thanh (và thực sự cả QuickTime Player và AVPlayerView tắt âm thanh khi chuyển tiếp) nhưng tất cả những nỗ lực trên một phần của tôi cho một trong hai vô hiệu hóa tất cả các âm thanh, tắt tiếng tất cả theo dõi hoặc thay đổi thuật toán âm thanh sân dường như không tạo nên sự khác biệt. Phát lại vẫn bị thay đổi ngay cả khi không có âm thanh.
Tôi cũng đã cố dừng phát lại và sau đó gọi prerollAtRate:completionHandler
với tỷ lệ mới nhưng điều đó cũng không tạo ra sự khác biệt.
Trình phát QuickTime và AVPlayerView đang làm gì cho phép phát lại phim mượt mà ở tốc độ 10x, 30x hoặc thậm chí 60x?
Bạn có tìm thấy bất kỳ giải pháp cho vấn đề này? Nếu vậy, thì đó là cái gì? –
Không, xin lỗi. Tôi đã phải xây dựng giải pháp của riêng mình, nhưng nó không tốt như tôi muốn. Về lâu dài, tôi nghĩ trải nghiệm phát lại tốt nhất sẽ yêu cầu đào sâu hơn và xử lý giải mã khung bên ngoài bằng cách sử dụng AVPlayer. – kennyc
Theo macro 10.12.3/Xcode 8.2.1, tôi đã xác nhận một số điều trên: tăng tốc lên đến 2.0 không có vấn đề gì nhưng thiết lập 'AVPlayer.rate' thành giá trị lớn hơn 2.0 khiến phát lại bị giật; sử dụng AVPlayerView để thay đổi kết quả tốc độ phát lại trong việc phát lại mượt mà cho tất cả các tốc độ; đặt tỷ lệ đầu tiên thành 0.0 và sau đó gọi 'prerollAtRate (atRate :, completionHandler:)' và đặt tốc độ cao trong trình xử lý hoàn thành không giải quyết được vấn đề; tạo một AVMutableComposition chỉ với đoạn video không giải quyết được vấn đề; vô hiệu hóa bản âm thanh không giải quyết được sự cố. – Jamborino