2012-03-23 24 views
8

Tôi hiện đang phát triển trình phát video cho nội dung được phát trực tiếp bằng cách sử dụng Khung công cụ AVPlayer. Tôi tình cờ xem Chuỗi thuộc tính VideoGravity của AVPlayerLayer, cho phép tôi đặt các chế độ Scaling/Resizing của người chơi thành các giá trị khác nhau.Cài đặt AVPlayerLayer VideoGravity hoạt động trên Simulator, không phải trên iPad

Để cung cấp cho người dùng các tính năng mở rộng quy mô-được biết đến từ các cầu thủ mặc định, tôi đã thiết lập một phương pháp mà sẽ thực thi đoạn mã sau:

AVPlayerLayer *layer = (AVPlayerLayer *)[self.videoContainer layer]; 

if([layer.videoGravity isEqualToString:AVLayerVideoGravityResizeAspect]) 
    layer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
else 
    layer.videoGravity = AVLayerVideoGravityResizeAspect; 

này hoạt động rất tốt trong Simulator, nhưng bằng cách nào đó không phải trên iPad 2 của tôi với iOS 5.0.1 được cài đặt.

Có ai gặp phải sự cố tương tự không? Đây có phải là lỗi iOS đã biết với 5.0.1 không? Có cách nào tốt hơn để triển khai thực hiện thu nhỏ/thay đổi kích thước bằng AVPlayerLayer?

Bất kỳ ý tưởng/lời khuyên/giúp đỡ và khuyến nghị được đánh giá cao rất nhiều,

Cảm ơn,

Sam

+0

Khi bạn nói nó không hoạt động trên thiết bị thực, điều gì thực sự xảy ra? Không có gì hoặc một số hành vi bất ngờ khác? – reddersky

+0

tiếc là không có gì (hiển thị) xảy ra ... nếu tôi NSLog (layer.videoGravity) Chuỗi VideoGravity "đúng" được trả lại. Nó cũng chấp nhận những thay đổi, nhưng nó không thực sự thay đổi kích thước của nội dung phim ... – samsam

+0

Tôi có thể đang sủa cây sai ở đây, nhưng tại sao bạn đặt videoGravity thành một chuỗi tên không đổi thay vì chỉ thiết lập nó đến chính bản thân nó? – reddersky

Trả lời

20

Đặt các giới hạn trong nội bộ setNeedsLayout. Bạn phải gọi đây là bản thân của bạn nếu bạn chỉ thay đổi lực hấp dẫn. Một cuộc gọi đến setNeedsDisplay để buộc tái vẽ không thể làm tổn thương, hoặc, mặc dù tôi tưởng tượng AVPlayerLayer đang cập nhật nội dung lớp thường xuyên đến mức không quan trọng.

CHỈNH SỬA: Tên của bạn tốt gấp đôi tôi!

+1

Tôi không thể nhận được giải pháp này để làm việc cho tôi, và thấy rằng vấn đề là một lỗi trong iOS 5.0 và 5.0.1. Nếu bất cứ ai khác tình cờ về điều này và cần một giải pháp, hãy kiểm tra: http://stackoverflow.com/questions/8918105/animate-avplayerlayer-videogravity-property –

4

tôi cuối cùng đã quản lý để khắc phục vấn đề của tôi bằng cách trao đổi các tuyên bố trên với những điều sau ...

if (self.player.status == AVPlayerStatusReadyToPlay) { 
    if([((AVPlayerLayer *)[self.videoContainer layer]).videoGravity isEqualToString:AVLayerVideoGravityResizeAspect]) 
     ((AVPlayerLayer *)[self.videoContainer layer]).videoGravity = AVLayerVideoGravityResizeAspectFill; 
    else 
     ((AVPlayerLayer *)[self.videoContainer layer]).videoGravity = AVLayerVideoGravityResizeAspect; 

    ((AVPlayerLayer *)[self.videoContainer layer]).bounds = ((AVPlayerLayer *)[self.videoContainer layer]).bounds; 
} 

đặt giới hạn của AVPlayerLayer thành giới hạn của AVPlayerLayer dường như thực hiện thủ thuật. mặc dù tôi không thực sự hiểu tại sao. Tuy nhiên,

tuy nhiên: giải pháp làm việc nhanh.

+1

Xem thêm câu hỏi về [Animate AVPlayerLayer videoGravity property] (http://stackoverflow.com/a/10489823/21698) cho một giải pháp làm động thay đổi trọng lực video trên iOS 5.0.1. – 0xced

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