2013-04-16 35 views
13

Vì vậy, tôi biết AVPlayerItemDidPlayToEndTimeNotification được gửi khi một bộ phim 'has played to its end time'.Chính xác những gì gây nên AVPlayerItemDidPlayToEndTimeNotification?

Câu hỏi của tôi là làm thế nào để người chơi biết nếu một mục đạt đến thời gian kết thúc? Tôi đang phát luồng trực tiếp được tạo bởi trình tạo bên thứ ba. Nó tiếp tục cập nhật M3U8 và tạo các tệp TS mới, phát trực tuyến nên thực hiện. Nhưng tại một số điểm người chơi của tôi nhận được một AVPlayerItemDidPlayToEndTimeNotification và do đó gọi các phương thức thoát của tôi và thoát. Trình tạo luồng của bên thứ ba vẫn chạy OK. Tôi có thể khởi động lại trình phát và xem các luồng. Vì mục phát là luồng trực tiếp, playerItem.duration không phải là số thời lượng có thể đọc được, điều này giúp việc tìm kiếm Thời gian kết thúc giống như một ma thuật đen đối với tôi ...

Thực sự bối rối khi người chơi nghĩ nó kết thúc như thế nào. Đoán của tôi là có lẽ các tập tin TS là vấn đề và làm cho người chơi nghĩ rằng toàn bộ chơi là hơn? Nhưng nếu vậy, người chơi có nên thay đổi trạng thái để nói sth thay vì âm thầm kết thúc chơi không?

P.S. Tôi cũng đã thử những cách khác nhau như làm cho một ts mất tích từ danh sách m3u8, hoặc ngừng tạo ra những cái mới để người chơi sẽ chơi m3u8 hiện tại và chơi qua ts cuối cùng, không có gì làm cho kỳ diệu AVPlayerItemDidPlayToEndTimeNotification xảy ra ....

I đã đăng ký thông báo như sau: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerItem];

+0

Bạn có chắc chắn nó không chỉ là tính năng tự động nối lại thành một luồng mới trên lối ra? – CodaFi

+1

"Chính xác điều gì gây nên AVPlayerItemDidPlayToEndTimeNotification?" - Đặt một điểm dừng trong một phương thức được đăng ký cho nó, chạy trong debuggger, đợi cho điểm ngắt được nhấn, 'backtrace',' frame 1', lợi nhuận. –

+0

@CodaFi Cảm ơn bạn đã trả lời! Tôi chắc chắn, người chơi ngừng chơi và không đọc bất cứ thứ gì từ máy chủ nơi m3u8 là từ .. – Ooops

Trả lời

5

Vì vậy, nó chỉ ra rằng sự cố là do trình tạo luồng của bên thứ ba. Nó có sth ('IV', như trong Initialiation Vector) sai khi truyền nội dung TS, vì vậy tại một số điểm AVPlayer đọc một số điểm trên TS, sau đó xem xét bộ phim được hoàn thành, và do đó gửi AVPlayerItemDidPlayToEndTimeNotification .... Không thực sự là Mục tiêu -C Tôi đoán vậy.

Nhưng câu hỏi của tôi về điều kiện nào AVPlayer gửi AVPlayerItemDidPlayToEndTimeNotification vẫn chưa được biết. Nếu có ai biết bất kỳ chi tiết nào về điều này, vui lòng cập nhật tại đây. Cảm ơn!

-3

Đối số cuối cùng nên self.player không phải là playerItem

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerItem]; 
+5

Điều này không chính xác. Thông báo là một phần của lớp AVPlayerItem. – martinjbaker

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