¿Se pueden recuperar datos de un stream de MediaPlayer?

Si tuviera que transmitir algún tipo de medio a un MediaPlayer, ¿hay alguna forma de copiarlo antes / después de que se juega? Por ejemplo, si tuviera que transmitir un clip de YouTube, ¿es posible guardar ese clip mientras se está reproduciendo?

Editar:
(La respuesta de Ocelot me hizo darme cuenta de lo localizada que es esta pregunta).

Lo que estoy tratando de hacer es copiar el flujo de un MediaPlayer ya en curso (ya sea youtube o stream de música). Quiero ser capaz de ser notificado cuando un nuevo flujo comienza y termina. Hasta ahora lo único que encontré (para el último) que es incluso remotamente cerrar la cadena de difusión ACTION_AUDIO_BECOMING_NOISY pero eso realmente no hace nada por lo que necesito. ¿Hay alguna manera de hacer esto?

No he probado esto, y parece un poco de trabajo, pero aquí es lo que intentaría:

  1. Cree una subclase de Socket. En esta clase, puede manejar todas las lecturas de bytes y guardar la secuencia localmente o hacer lo que quiera con ella

  2. Cree su propio proveedor de contenido, que puede utilizar para pasar URIs a su reproductor de medios, en su propio formato. Ejemplo: mystream://youtube.com/watch?v=3Rhy37u

  3. En su proveedor de contenido, anule el método openFile y en él, abra su propio socket y cree un ParcelFileDescriptor con él .

Ahora, simplemente pasando el url de formato nuevo a su mediaplayer debe hacer que todos los flujos pasen a través de su Socket, donde puede guardar sus datos.

Una forma es averiguar primero dónde está el video en el servidor para exmaple en youtube con regex simple como este:

 Regex("(?<=&t=)[^&]*").Match(file).Value; 

Puede recuperar url al vídeo y luego descargarlo como

  public static void Download(string videoID, string newFilePath) { WebClient wc = new WebClient(); string file = wc.DownloadString(string.Format("http://www.youtube.com/watch?v={0}", videoID)); string t = new Regex("(?<=&t=)[^&]*").Match(file).Value; wc.DownloadFile(string.Format("http://www.youtube.com/get_video?t={0}=&video_id={1}",t,videoID), newFilePath); } 

Es c # código, pero usted podría convertirlo fácilmente a java.

@zrgiu

He intentado ir con esta solución, pero el MediaPlayer recupera un FileDescriptor de la URI, así que lamentablemente no se puede pasar http URL como esta.

También encontré otra solución, que sugiere para crear un ProxyServer local en su dispositivo para servir a los archivos de Internet, debería ser posible guardar también los archivos transmitidos a través del proxy.

  • Cómo reproducir audio en segundo plano en segundo plano en Android?
  • Precisión de MediaPlayer.seekTo (int msecs)
  • Android MediaPlayer Detener y reproducir
  • ¿Qué significa MediaPlayer info / warning (973, 0)?
  • ¿Por qué mediaPlayer.seekTo (msec) no actualiza surfaceView cuando mediaPlayer está pausado?
  • MediaPlayer piensa aac * archivo de audio es un archivo de vídeo?
  • Reproducción de audio de MediaStore en un reproductor de medios Android
  • ¿Cómo reanudar el reproductor multimedia?
  • Cargar un MediaPlayer desde un Uri en un contexto de activos
  • Averigüe lo que MediaPlayer está reproduciendo y detenerlo enPause o onStop?
  • ¿Cómo puedo configurar el permiso de archivo a MODE_WORLD_READABLE?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.