2012-02-12 38 views
10

Tôi muốn phát triển một ứng dụng sẽ hiển thị danh sách video từ YouTube và khi người dùng nhấp vào video Youtube, ứng dụng của tôi sẽ bắt đầu phát âm thanh của video đó. Tôi đã xem qua một giải pháp để tải xuống video YouTube trước tiên và trích xuất âm thanh, nhưng để tăng tốc quá trình tôi muốn chuyển trực tiếp các bit âm thanh đến trình phát âm thanh của ứng dụng thay vì video. Nói cách khác, tôi muốn phát âm thanh YouTube thay vì video trong ứng dụng của tôi.Làm cách nào để chỉ truyền dữ liệu âm thanh từ video trên youtube vào ứng dụng của tôi?

+1

Tôi không tin YouTube cung cấp một âm thanh chỉ download/suối. Nếu bạn có quyền kiểm soát cách video đang được phát thì bạn có thể chỉ đơn giản là ẩn (và có thể tiết kiệm năng lượng CPU bằng cách không giải mã) video, nhưng tôi nghi ngờ đó là điều tốt nhất bạn có thể làm. Ngoài ra, nền tảng/ngôn ngữ này là gì? Nó có thể quan trọng. – perelman

Trả lời

5

Có vẻ như bạn đã ở hầu hết mọi nơi. Ứng dụng của bạn có cách để liệt kê các video và tải xuống các video đã chọn. Bạn chỉ cần một cơ sở hạ tầng để phát âm thanh trực tiếp từ các tệp video.

Video trên YouTube có thể là tệp FLV hoặc MP4. Bên trong các tệp này có thể là âm thanh MP3 hoặc AAC (một số codec âm thanh khác có thể thực hiện được, nhưng bạn sẽ không gặp phải các tệp đó trên YouTube). Điều này có nghĩa là ứng dụng của bạn cần biết cách tách các tệp FLV và MP4 trực tiếp và cách giải mã âm thanh MP3 và AAC trực tiếp sang PCM. Có thư viện để trợ giúp với các tác vụ này, tùy thuộc vào ngôn ngữ và nền tảng của bạn.

3

hãy thử trích xuất âm thanh từ dòng video bằng cách sử dụng đoạn mã sau:

// the video URL is the following 
    String url = "http://137.110.92.231/~chenyu/BBC.mp4"; 

    MediaPlayer mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    try { 
     mediaPlayer.setDataSource(url); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     mediaPlayer.prepare(); // might take long! (for buffering, etc) 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    mediaPlayer.start(); 
Các vấn đề liên quan