2012-07-03 24 views
15

Tôi đang cố gắng hiển thị phụ đề khi phát video bằng AVFoundation trên OS X.Hiển thị phụ đề bằng AVFayer AVPlayer trên OS X

Tôi đã xem qua tài liệu và tôi không thể tìm cách bật phụ đề. API chứa nhiều tham chiếu đến phụ đề, điều này khiến tôi tin rằng nó được hỗ trợ.

Trên iOS, phương pháp -[AVPlayerItem selectMediaOption:inMediaSelectionGroup:] được sử dụng để bật phụ đề gốc. Phương pháp này không có sẵn trong SDK 10.7. Có cách nào khác để hiển thị phụ đề không?

EDIT: Quicktime Player X có hỗ trợ phụ đề, ví dụ khi mở this movie menu phụ phụ đề xuất lựa chọn ngôn ngữ và sẽ hiển thị khi chọn tiếng Anh. Điều này khiến tôi tin rằng chúng được bao gồm trong API ...

+1

Bạn đã thử 'closedCaptionDisplayEnabled = YES' – Dustin

+0

@DustinRowland Cảm ơn, tôi đã bỏ lỡ điều đó. Chỉ cần thử nó, không thay đổi bất cứ điều gì như xa như tôi có thể nhìn thấy. – joerick

+0

Điều gì đã hiệu quả đối với tôi khi sử dụng AVAsset và AVPlayerItem, điều đó giúp tôi kiểm soát tốt hơn đối tượng của mình. – Winston

Trả lời

5

Tôi cũng tự gặp vấn đề này. Tôi thấy rằng không may là cách duy nhất để làm điều đó, ngoài việc chuyển sang QTKit, là tạo một lớp phụ đề riêng biệt (một CATextLayer) và định vị nó một cách thích hợp làm lớp con cho lớp người chơi. Ý tưởng là bạn thiết lập trình theo dõi thời gian định kỳ để kích hoạt mỗi giây hoặc cập nhật phụ đề, cùng với (và đây là tùy chọn) một số phần tử giao diện người dùng mà bạn có thể hiển thị thời gian đã trôi qua trong video.

Tôi đã tạo một lớp trình phân tích cú pháp tệp SubRip (.srt) cơ bản; bạn có thể tìm thấy ở đây: https://github.com/sstigler/SubRip-for-Mac. Hãy chắc chắn kiểm tra wiki để xem tài liệu. Lớp học có sẵn theo các điều khoản của giấy phép BSD.

Một thách thức khác mà bạn có thể gặp phải là cách điều chỉnh động chiều cao của CATextLayer để tính toán độ dài phụ đề khác nhau và độ rộng thay đổi của chế độ xem có sẵn (nếu bạn chọn làm cho nó có thể thay đổi kích thước). Tôi đã tìm thấy một lớp con CALayoutManager tuyệt vời thực hiện điều này và thực hiện một số sửa đổi cho nó để làm cho nó hoạt động cho những gì tôi đang cố gắng làm: https://github.com/sstigler/height-for-width.

Tôi hy vọng điều này sẽ hữu ích.

+0

Rất cám ơn. Câu trả lời hữu ích, nhưng tôi không nghĩ rằng nó sẽ làm các trick trong trường hợp của tôi. Chúng tôi đang nhận phụ đề như một phần của luồng video hoặc tệp video, chúng tôi hiện không có quyền truy cập vào tệp SRT. Có thể có ích nếu tôi tìm ra một cách để trích xuất một mặc dù ?! – joerick

2

Cách thêm tệp phụ đề bằng cách thêm phụ đề scc dưới dạng AVMediaTypeClosedCaption theo dõi vào AVPlayer bằng AVMutableCompositionTrack và trình phát sẽ kiểm soát nó và tôi đã thử hoặc làm việc hoặc thêm tệp văn bản với văn bản thời gian nhanh hoặc bất kỳ văn bản nào theo dõi AVMediaTypeText và trình phát sẽ hiển thị phụ đề tôi không biết tại sao AVMediaTypeSubtitle này theo dõi phụ đề nào được hỗ trợ cho nó

+0

Xin vui lòng, nó sẽ thực sự hữu ích nếu bạn có thể chia sẻ mã mẫu. Cảm ơn. –

+1

Sử dụng sublerCLI bạn có thể chuyển đổi phụ đề srt hoặc scc sang phụ đề theo dõi AVMediaTypeSubtitle và AVMediaTypeClosedCaption track bên trong một container m4v ================> var sublerTask = NSTask() sublerTask.launchPath = sublerPath // Đường dẫn SublerCLI sublerTask.arguments = ["-source", srtFilePath, "- dest", tempM4V, "- ngôn ngữ", ngôn ngữ "- siêu dữ liệu", ngôn ngữ] sublerTask.launch() sublerTask.waitUntilExit() –

+0

sau đó bạn có thể đọc m4v như AVAsset và lấy phụ đề từ nó –