2012-02-12 2 views
10

Я хочу разработать приложение, которое отобразит список видео от YouTube, и когда пользователь нажмет на видео Youtube, мое приложение начнет воспроизводить его аудио. Я наткнулся на решение сначала загрузить видео YouTube и извлечь аудио, но для ускорения процесса я хочу напрямую передавать звуковые биты на аудиопроигрыватель приложения вместо видео. Другими словами, я хочу передать аудиозапись YouTube вместо видео в моем приложении.Как передавать только аудиоданные с YouTube-видео на мое приложение?

+1

Я не верю, что YouTube предлагает аудио-только скачать/поток. Если у вас есть контроль над воспроизведением видео, вы можете просто скрыть (и, возможно, сохранить мощность процессора, не декодируя) видео, но я подозреваю, что это лучшее, что вы можете сделать. Кроме того, на какой платформе/языке это происходит? Это может иметь значение. – perelman

ответ

5

Звучит так, как будто вы уже в большинстве своем. У вашего приложения есть способ перечислить видео и загрузить выбранные. Вам просто нужна инфраструктура для воспроизведения звука непосредственно из видеофайлов.

Видеоролики YouTube могут быть FLV или MP4-файлами. Внутри этих файлов может быть звук MP3 или AAC (возможны некоторые другие аудиокодеки, но вы не столкнетесь с ними на YouTube). Это означает, что ваше приложение должно знать, как напрямую разбирать файлы FLV и MP4, и как декодировать MP3 и аудио AAC непосредственно в PCM. Есть библиотеки, которые помогут в решении этих задач, в зависимости от вашего языка и платформы.

3

пожалуйста, попробуйте извлечь аудио из видео потока, используя следующий код:

// 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();