2010-06-10 32 views
10

Tệp Mp3 có thể được xử lý bằng cách sử dụng mp3 SPI support này, nhưng tôi không tìm thấy thứ gì đó tương tự như tệp mp4.Có một API Java cho các tệp mp4 không?

Mọi trợ giúp sẽ được đánh giá cao.

--UPDATE

Những gì tôi muốn làm là có được kích thước của tập tin, như tôi đã làm với các file wave sử dụng mã này:

AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file); 
AudioFormat format = audioInputStream.getFormat(); 
long audioFileLength = file.length(); 
int frameSize = format.getFrameSize(); 
float frameRate = format.getFrameRate(); 
float durationInSeconds = (audioFileLength/(frameSize * frameRate)); 

--ANSWER

Dưới đây là câu trả lời mã sử dụng gợi ý của @mdma (IBM toolkit):

/** 
* Use IBMPlayerForMpeg4SDK to get mp4 file duration. 
* 
* @return the mp4File duration in milliseconds. 
*/ 
public static long getMp4Duration(File mp4File) throws IllegalStateException, IOException { 
PlayerControl playerControl = PlayerFactory.createLightweightMPEG4Player(); 
playerControl.open(mp4File.getAbsolutePath()); 
long mili = playerControl.getDuration(); 
// int sec = (int) ((mili/1000) % 60); 
// int min = (int) ((mili/1000)/60); 
// System.out.println("IBM Tookit result = " + min + ":" + sec); 
return mili; 
} 

-

liên quan, ngôn ngữ độc lập, câu hỏi: Anyone familiar with mp4 data structure?

Trả lời

13

Mp4 là định dạng vùng chứa - để có thể tìm thời lượng của âm thanh bên trong, trước tiên bạn phải phân tích nội dung ra khỏi vùng chứa. Bạn có thể trích xuất nội dung của tệp mp4 bằng cách sử dụng isobox mp4parser.

Khi bạn đã thực hiện điều đó, bạn sẽ có dữ liệu âm thanh thô. Nếu nó là một trong những định dạng được hỗ trợ trong java (wav, mp3, vv ..) thì bạn có thể chỉ cần mở tập tin này giống như bạn đã làm cho wavs rồi. Ban đầu, bạn có thể trích xuất âm thanh thành một tệp riêng biệt, vì mục đích đơn giản và gỡ lỗi dễ dàng hơn. Khi điều này làm việc, sau đó bạn có thể thực hiện việc trích xuất nội tuyến - bạn triển khai InputStreamFilter trích xuất nội dung âm thanh từ mp4 khi đang di chuyển, vì vậy không yêu cầu tệp bổ sung bên ngoài.

IBM Alphaworks có thư viện bộ giải mã java thuần java, nhưng có thể quá mức cần thiết cho nhu cầu hiện tại của bạn.

+0

Dự án mp4parser không có svn hoặc tải xuống. Tôi đang thử với JMF + Jffmpeg, nhưng tôi đang gặp khó khăn với nó. –

+0

@Tom - Các nguồn mp4parser đang có - Tôi vừa kiểm tra các nguồn từ http://mp4parser.googlecode.com/svn/trunk/ – mdma

+2

@TomBrito Tôi thực sự đang cố gắng, nhưng dự án này quá nghèo trong tài liệu .. –

0

Bạn không chỉ định những gì bạn muốn làm. Nếu bạn chỉ muốn phát tệp, bạn có thể sử dụng MPlayer và điều khiển tệp từ xa qua API ProcessBuilder và tiêu chuẩn.

+0

nhân tiện, trong đó gói java là MPlayer? Có thể nó hữu ích .. –

+0

MPlayer là một công cụ dòng lệnh. –

8

Xuggler (http://www.xuggle.com/xuggler/) cung cấp về trình bao bọc Java tốt nhất cho FFMPEG mà tôi đã xem - nó sẽ cho phép bạn giải mã hình ảnh ra khỏi hầu hết mọi tệp và sau đó thực hiện bất cứ điều gì bạn thích với chúng.

+0

Không có thứ gì có tệp jar, thay vì dll? Tôi thích .. –

+0

Tôi chưa từng thấy bộ giải mã java thuần túy, mọi thứ đều sử dụng thư viện gốc. Nếu bạn tìm thấy một mặc dù, tôi muốn nghe về nó! – Curtis

+0

Ồ, đừng bận tâm. Chỉ cần đọc câu trả lời được chấp nhận. – Curtis

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