2011-05-10 37 views
11

Tôi có ứng dụng iOS phát video từ luồng trực tiếp "playlist.m3u8" và tôi có trình phát tùy chỉnh được tạo bằng AVPlayer. Để xử lý các tương tác người dùng thông thường như quét, tôi cần lấy thời lượng của video, nhưng vì lý do nào đó trên iOS 4.3 sử dụng xcode 4.0 khi tôi gọi mã sau tôi nhận được CMTime khi chuyển đổi thành giây cho NaN - tôi biết những gì nó đang làm bởi vì CMTimeValue = 0 và CMTimeScale = 0 cung cấp cho NaN và CMTimeFlags = 17 thậm chí còn kỳ lạ hơn.iOS AVAsset.duration là số không cho phát trực tiếp HTTP nhưng hoạt động cho tiến trình

Dưới đây là đoạn code tôi sử dụng mà không phải là phức tạp ở tất cả:

AVPlayerItem *pItem = mPlayer.currentItem; 
AVAsset* asset = pItem.asset; 
CMTime d = asset.duration; 
double duration = CMTimeGetSeconds(asset.duration); 

Tôi cũng nên đề cập đến mà tôi làm theo dõi tình trạng của các danh sách nhạc bốc để chắc chắn rằng nó đã sẵn sàng trước khi tôi bắt đầu chơi/chà kỹ:

[mPlayer addObserver:self forKeyPath:@"currentItem.status" options:0 context:VideoPlaybackViewDelegateStatusContext]; 

Cảm ơn bạn đã giúp đỡ về những vấn đề này mà bất kỳ ai cũng có thể cung cấp.

+0

Tôi quên đề cập rằng tính năng này hoạt động trong iOS 4.2 - cả trình mô phỏng và thiết bị. – Aaron

Trả lời

8

https://developer.apple.com/library/ios/releasenotes/AudioVideo/RN-AVFoundation-Old/#//apple_ref/doc/uid/TP40011199-CH1-SW4

Các tài liệu trên đề cập rằng thời gian bây giờ sẽ được lấy từ AVPlayerItem Ví dụ, thay vì hơn các sản phẩm tương ứng AVAsset. Để có được khoảng thời gian từ mục máy nghe nhạc hiện qua giá trị khóa quan sát, tôi sử dụng các phương pháp sau đây (ban đầu được kéo từ NGMoviePlayer được viết dành cho iOS 4.0):

- (void)loadPlayerWithItem:(AVPlayerItem *)playerItem { 
    self.player = [AVPlayer playerWithPlayerItem:playerItem]; 
    ... 
    // changed this from previous value currentItem.asset.duration 
    [self.player addObserver:self forKeyPath:@"currentItem.duration" 
            options:0 
            context:nil]; 
    ... 
} 

tôi thực hiện các thay đổi nêu trên trong máy nghe nhạc của tôi và thời gian hoạt động ngay bây giờ! Sự thay đổi này trong AVFoundation là nguyên nhân gốc rễ của vấn đề. CMTimeFlags = 17 chỉ kCMTimeFlags_Indefinite & kCMTimeFlags_Valid, và docs ghi rõ:

Đặc biệt, trong suốt thời gian báo cáo của tài sản URL cho streaming dựa trên phương tiện truyền thông thường kCMTimeIndefinite, trong khi thời gian của một AVPlayerItem tương ứng có thể khác nhau và có thể thay đổi trong khi nó phát.

+0

Rất cám ơn darvids0n và tôi cảm thấy ngu ngốc vì thiếu ghi chú phát hành :-). – Aaron

+0

vẫn trả về nan cho tôi :(, sử dụng iOS 9.0 –

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