2012-05-03 21 views
5

Tôi đang xây dựng một ứng dụng Swing nhỏ mà tôi muốn nhúng một bộ phim bên trong. Quan trọng hơn, ứng dụng này là một ứng dụng WebStart - và thư viện sẽ có thể được đóng gói trong jnlp mà tôi khởi chạy -i.e, không phụ thuộc vào các thư viện gốc.Mọi khung công tác Java đơn giản (và cập nhật) để nhúng phim trong ứng dụng Swing?

Tôi biết và đã thử JMF nhưng khả năng tương thích về định dạng mà tôi tin là tương đối kém khi so sánh với các khung công tác khác.

Có thể ai đó vui lòng cung cấp đoạn mã mẫu về triển khai đơn giản bằng thư viện được đề xuất của họ không?

Rất cám ơn trước.

Trả lời

28

Một số cân nhắc cho JavaFX như một giải pháp như một khung phát lại phương tiện dựa trên Java.

  1. Kể từ ngày Jdk7u4, JavaFX được đồng bộ với jdk cho Mac và Windows (XP, Vista, 7, 32 và 64 bit).
  2. JavaFX có thể được nhúng trong ứng dụng Swing.
  3. JavaFX bao gồm các thư viện gốc, nhưng mọi khung công tác Java sẽ cần thư viện riêng để thực hiện tốt video.
  4. Bộ công cụ triển khai toàn diện được bao gồm trong JavaFX SDK và/hoặc bao gồm khả năng tạo các triển khai dựa trên jnlp.
  5. JavaFX 2.1 hỗ trợ flvs mã hóa vp6 (định dạng cũ) cũng như một số định dạng mã hóa hiện đại và được sử dụng khác như mp4/aac/mp3.
  6. JavaFX chỉ hỗ trợ các codec phương tiện và định dạng vùng chứa giới hạn, ví dụ: nếu bạn đã cài đặt codec trên máy và có thể phát tệp được mã hóa ở định dạng đó, ví dụ: chrome, windows media player hoặc flash không đảm bảo rằng cùng một tệp sẽ phát trong JavaFX.
  7. Phát lại mp4 trên XP hoặc Linux yêu cầu người dùng phải cài đặt codec cần thiết theo cách thủ công, nhưng các nền tảng khác (osx, win7, vista) không yêu cầu cài đặt codec mp4 thủ công.
  8. Sử dụng JavaFX trên máy Mac yêu cầu người dùng phải sử dụng OpenJDK 7 cho Mac chứ không phải Apple JDK.
  9. Hỗ trợ JavaFX cho các ứng dụng jnlp được khởi chạy trên máy Mac sẽ không khả dụng cho đến cuối năm nay (2012) và tương tự cho Linux.
  10. Có thể bạn có thể gói toàn bộ nền tảng JavaFX với ứng dụng của mình trong một jnlp (mặc dù tôi chưa thấy ai làm điều đó).
  11. Phương pháp được khuyến nghị cho triển khai jnlp là thêm đặc tả môi trường JavaFX tối thiểu vào jnlp và có bộ công cụ triển khai JavaFX và webstart đảm bảo rằng nó đã có mặt và được cài đặt đúng trên máy của người dùng.
  12. Tương tác giữa Swing và JavaFX yêu cầu một số sự bất tiện và sự quan tâm xung quanh luồng và cũng có một mã khởi chạy ứng dụng hơi khác giữa Swing và JavaFX. Một số người đã phàn nàn về điều này trên diễn đàn, hầu hết dường như không có quá nhiều vấn đề.
  13. Đối với tốt hơn hoặc tồi tệ hơn (tôi tin tưởng tốt hơn), JavaFX có khả năng là phương tiện truyền thông và phát triển khách hàng duy nhất từ ​​Oracle đang tiếp tục phát triển lớn và các tính năng mới.
  14. Cuối cùng (năm nay hoặc tiếp theo) JavaFX sẽ bao gồm trong tất cả các thời gian chạy Java mới cho tất cả các nền tảng tiêu dùng lớn chạy các phiên bản Java SE hiện đại.
  15. Hỗ trợ cộng đồng để phát triển trong JavaFX từ Oracle và bên thứ 3 là (tôi tin) tốt.

Đây là một mẫu ứng dụng JavaFX mà đóng một video:

import javafx.application.Application; 
import javafx.scene.*; 
import javafx.scene.media.*; 
import javafx.stage.Stage; 

public class VideoPlayerExample extends Application { 
    public static void main(String[] args) throws Exception { launch(args); } 
    @Override public void start(final Stage stage) throws Exception { 
    final MediaPlayer oracleVid = new MediaPlayer(
     new Media("http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv") 
    ); 
    stage.setScene(new Scene(new Group(new MediaView(oracleVid)), 540, 208)); 
    stage.show(); 

    oracleVid.play(); 
    } 
} 
+2

Tóm tắt toàn diện *** và *** mẫu mã? Đó là 'đi xa thêm'. :) –

+0

Tuyệt đối - không thể đồng ý hơn. – totalcruise

3

Mặc dù tôi không gặp bất kỳ vấn đề nào về khả năng tương thích định dạng o JMF bạn có thể xem JavaFX được thiết kế để trở thành đối thủ cạnh tranh với Flash, vì vậy phải hỗ trợ tất cả định dạng phương tiện và codec. Bạn cũng có thể nhúng trình phát Flash vào ứng dụng java bằng JNI/JNA nhưng có vẻ quá phức tạp. Tôi khuyên bạn nên bắt đầu với JMF và tìm giải pháp khác chỉ khi bạn thực sự có vấn đề.

2

..have thử JMF nhưng khả năng tương thích định dạng Tôi tin là tương đối kém khi so sánh với các khuôn khổ khác ra khỏi đó.

Bạn đúng về việc thiếu hỗ trợ cho codec hiện đại, nhưng nó hoạt động tốt cho các codec cũ hơn. Đó có thể là một lựa chọn khả thi nếu:

  1. Bạn kiểm soát định dạng (trái với người dùng mở 'bất kỳ video cũ' nào). Mà bạn dường như làm.
  2. Băng thông không phải là vấn đề lớn. Các codec hiện đại hơn cải thiện nén rõ rệt.

Trong khi phiên bản 'gói hiệu suất' của JMF sử dụng người bản địa hỗ trợ nhiều định dạng hơn, API Java JMF lõi cũng cung cấp một số định dạng cơ bản.