2011-09-07 28 views
13

Tôi đang sử dụng AVPlayer để chơi một dòng suối trực tiếp từ Internet bằng cách sử dụng đoạn mã sau:iOS AVPlayer Play/Pause nút vấn đề

NSString *u = @"http://192.192.192.192:8036"; 
NSURL *url = [NSURL URLWithString:u]; 
radiosound = [[AVPlayer alloc] initWithURL:url]; 
    [radiosound play]; 

Và tôi có một nút play:

[radiosound play]; 

và Pause :

[radiosound pause]; 

Vấn đề của tôi là tôi chỉ muốn sử dụng một nút Phát/Tạm dừng, nhưng khi tôi đang sử dụng mã này

if (radiosound.isPlaying) {   
    [radiosound pause]; 
} else {     
    [radiosound play]; 
} 

Ứng dụng của tôi bị lỗi, vì AVPlayer không nhận ra "isPlaying".

Bất kỳ mẹo nào?

Trả lời

37

AVPlayer không có thuộc tính isPlaying. Sử dụng thuộc tính rate (0,0 có nghĩa là dừng lại, chơi 1.0).

if (radiosound.rate == 1.0) {   
    [radiosound pause]; 
} else {     
    [radiosound play]; 
} 

Bạn có thể xem tham chiếu lớp AVPlayerhere.

+0

Một số người nói rằng nó vẫn sẽ ở chế độ máy bay 1.0 ngay cả khi bị tạm dừng. – openfrog

+2

Có thể bạn không nên so sánh _float_ với _1.0_. Có thể __if (radiosound.rate> 0,99) __? – SoftDesigner

+0

@SoftĐiểm thiết kế tốt, nhưng AFAICT cả 0.0 và 1.0 đều được thể hiện chính xác trong [điểm nổi IEEE-754] (http://www.cprogramming.com/tutorial/floating_point/understanding_floating_point_representation.html). –

5

Sau khi một số nghiên cứu tôi phát hiện ra rằng khi không có kết nối mạng, AVPlayer vẫn đặt tỷ lệ thành 1.0 sau khi nhận được thông báo -play.

Vì vậy, tôi cũng kiểm tra sự currentItem và sửa đổi phương pháp của tôi như thế:

-(BOOL)isPlaying 
{ 
    if (self.player.currentItem && self.player.rate != 0) 
    { 
     return YES; 
    } 
    return NO; 
} 

Hãy chia sẻ ý kiến ​​của bạn nếu bạn nghĩ cái gì là sai với phương pháp này.

+2

Điểm kiểm tra cho currentItem là gì? Khi tạm dừng nó không nên là nil. Mục không biến mất chỉ vì bạn tạm dừng trình phát. – openfrog

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