2009-09-09 41 views
21

Tôi đã quay video có màn hình xanh lam. Chúng tôi có phần mềm để chuyển đổi video đó thành nền trong suốt. Cách tốt nhất để phát video này được phủ lên UIView tùy chỉnh là gì? Bất cứ lúc nào tôi đã xem video trên iPhone, nó luôn khởi chạy giao diện trình phát đó. Bất kỳ cách nào để tránh điều này?iPhone SDK - Cách phát video có độ trong suốt?

Cảm ơn!

+0

Xin chào Adam, Bạn có thể cho tôi biết phần mềm nào bạn đang sử dụng để biến video thành nền trong suốt không? – Froyo

Trả lời

0

Cách duy nhất để tránh sử dụng giao diện trình phát là cuộn trình phát video của riêng bạn, điều này khá khó thực hiện. Bạn có thể chèn lớp phủ tùy chỉnh ở đầu giao diện trình phát để làm cho nó trông giống như người dùng vẫn còn trong ứng dụng của bạn, nhưng bạn không thực sự có quyền kiểm soát chế độ xem. Bạn có thể muốn thử phát video trong suốt của mình trong giao diện trình phát và xem video có hiển thị trong suốt không. Xem nếu có thuộc tính cho màu nền trong trình phát. Bạn cũng muốn đặt nó trong suốt.

--Mike

0

Tôi không chắc chắn API iPhone sẽ cho phép bạn xem phim trên đầu chế độ xem khác và vẫn có độ trong suốt.

-3

Bạn không thể tránh khởi chạy giao diện trình phát nếu bạn muốn sử dụng trình phát được tích hợp sẵn.

Đây là những gì tôi sẽ cố gắng:

  • có được cửa sổ mới được tạo ra bởi MPMoviePlayerController (see here)
  • khám phá hệ thống phân cấp xem trong cửa sổ đó, sử dụng [subviews cửa sổ] và [xem subviews]
  • cố gắng tìm hiểu xem một trong những chế độ xem đó là chế độ xem thực tế của người chơi
  • cố gắng chèn chế độ xem BEHIND chế độ xem trình phát (gửiSubviewToBack)
  • tìm hiểu xem t người chơi có hỗ trợ minh bạch hay không.

Tôi không nghĩ rằng bạn có thể làm tốt hơn điều này mà không cần viết trình phát của riêng bạn và tôi không biết liệu phương pháp này có hoạt động hay không.

Tùy thuộc vào kích thước video của bạn và những gì bạn đang cố gắng làm, bạn cũng có thể thử gây rối với GIF động.

-3

nếu bạn có thể trích xuất khung hình từ video của mình và lưu chúng dưới dạng hình ảnh thì video của bạn có thể được sao chép bằng cách thay đổi hình ảnh. Dưới đây là một ví dụ về cách bạn có thể sao chép hình ảnh của bạn để nó trông giống như một video:

enter image description here

trong hình ảnh này mà tôi tải lên tên của những hình ảnh có một cái tên khác nhau nhưng nếu bạn đặt tên cho hình ảnh của bạn như : frame1, fram2, fram3 .... sau đó bạn có thể đặt nó bên trong một vòng lặp.

Tôi chưa bao giờ thử nó Tôi chỉ biết nó hoạt động cho các hoạt ảnh đơn giản. Hy vọng nó hoạt động.

3

Bạn cần tạo trình phát tùy chỉnh bằng cách sử dụng AVFoundation.framework và sau đó sử dụng video có kênh alpha. Khung công tác AVFoundation cho phép quay video mạnh mẽ hơn nhiều mà không có nhiều hạn chế của khung công tác MPMedia. Xây dựng trình phát tùy chỉnh không khó như mọi người.Tôi đã viết một hướng dẫn về nó ở đây: http://www.sdkboy.com/?p=66

+1

liên kết đã chết, câu trả lời trở thành vô giá trị ... ngoài thực tế là AVFoundation không bao giờ hỗ trợ phát lại kênh alpha ra khỏi hộp. – Till

+1

Liên kết dường như hoạt động đối với tôi. –

1

Tôi giả định những gì bạn đang cố gắng làm là thực sự loại bỏ các màn hình xanh trong thời gian thực từ video của bạn: bạn sẽ cần phải phát video thông qua OpenGL, chạy các pixel shaders trên các khung và cuối cùng render mọi thứ bằng cách sử dụng một lớp OpenGL với nền trong suốt.

Xem phiên Capturing from the Camera using AV Foundation on iOS 5 từ WWDC 2011 giải thích kỹ thuật để thực hiện chính xác điều đó (xem Chroma Key bản trình diễn lúc 9:00). Có lẽ nguồn có thể được tải xuống nhưng tôi không thể tìm thấy liên kết ngay bây giờ.

8

Không biết nếu có ai vẫn còn quan tâm đến việc này bên cạnh tôi, nhưng tôi đang sử dụng GPUImage và bộ lọc Hiệu ứng Chroma Key để đạt được điều này EDIT ^^ https://github.com/BradLarson/GPUImage

: Mã ví dụ về những gì tôi đã làm (có thể ngày bây giờ):

-(void)AnimationGo:(GPUImageView*)view { 
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"mov"]; 

    movieFile = [[GPUImageMovie alloc] initWithURL:url]; 
    filter = [[GPUImageChromaKeyBlendFilter alloc] init]; 

    [movieFile addTarget:filter]; 

    GPUImageView* imageView = (GPUImageView*)view; 
    [imageView setBackgroundColorRed:0.0 green:0.0 blue:0.0 alpha:0.0]; 
    imageView.layer.opaque = NO; 
    [filter addTarget:imageView]; 

    [movieFile startProcessing]; 

    //to loop 
    [imageView setCompletionBlock:^{ 
     [movieFile removeAllTargets]; 
     [self AnimationGo:view]; 
    }]; 
} 

tôi có thể đã phải sửa đổi GPUImage một chút, và nó có thể không làm việc với phiên bản mới nhất của GPUImage nhưng đó là những gì chúng tôi sử dụng

+0

Hiệu năng phát lại có mượt không? – zakdances

+0

rất. Tôi đã phải thực hiện một vài thay đổi để GPUImage để làm cho nó để nó sẽ lặp lại, nhưng phần còn lại là khá nhiều chỉ cần thả vào. ^^ –

+0

Bạn có thể phát video và áp dụng bộ lọc cùng một lúc không? (chuyển đổi thời gian thực, nói cách khác) – zakdances

1

các GPUImage sẽ làm việc, nhưng nó không phải là hoàn hảo vì thiết bị iOS không phải là nơi để làm xử lý video của bạn. Bạn nên làm tất cả trên màn hình bằng công cụ video chuyên nghiệp xử lý chromakey, sau đó xuất video bằng kênh alpha. Sau đó, nhập video vào gói ứng dụng iOS của bạn như được mô tả tại playing-movies-with-an-alpha-channel-on-the-ipad. Có rất nhiều vấn đề về chất lượng và thời gian tải bạn có thể tránh bằng cách đảm bảo video của bạn được chuyển thành video alpha kênh đúng cách trước khi video được tải lên thiết bị iOS.

+4

Chúng ta có thể tranh luận về chất lượng, nhưng xét về hiệu suất, các hoạt động chroma keying trong GPUImage là tất cả các trình đổ bóng OpenGL ES đơn giản. Chúng chạy ở tốc độ 60 FPS cho tất cả trừ các video lớn nhất trên các thiết bị iOS cũ hơn. Chi phí trên đó là không đáng kể so với thời gian giải mã video. Làm thế nào để AVAnimator so sánh với giải mã tăng tốc phần cứng trong AV Foundation khi nói đến hiệu suất phát lại? –

+0

Vấn đề với ChromaKey là khi có sự cố với video nguồn, như vậy http://www.sonycreativesoftware.com/solving_tough_keying_problems_in_vegas_software. Nếu chúng ta sống trong một thế giới hoàn hảo, thì tất cả các video sẽ hoàn hảo và sẽ không bao giờ có vấn đề.Tuy nhiên, việc xử lý video của bạn trên card đồ họa có nghĩa là nó thực sự khó phát hiện khi có vấn đề. Nó có thể nhìn ổn trên một mô hình iPhone nhưng có thể trông khủng khiếp trên iPad. Quan điểm của tôi là những vấn đề này đã được giải quyết trên máy tính để bàn với các gói video chuyên nghiệp. – MoDJ

+0

Theo như hiệu suất hoạt động, AVAnimator chỉ thực hiện một thao tác từ bộ nhớ được ánh xạ hoặc tải từ bộ nhớ được ánh xạ vào kết cấu mà không cần chuyển sang card đồ họa (CoreGraphics thực hiện điều này), vì vậy nó cũng có thể nhận được kết quả 60FPS. Thời gian giải mã h.264 thực sự mất nhiều thời gian hơn để bắt đầu khi so sánh với AVAnimator, nhưng AVAnimator phải giải mã từ tài nguyên dự án 7zip để bắt đầu vì vậy nó thực sự phụ thuộc vào cách ứng dụng được thiết lập. – MoDJ

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