2009-07-29 20 views
7

Estoy escribiendo un cliente RTSP en Android. Soy capaz de recibir las respuestas para todas las solicitudes es decir,Cliente RTSP en android

  1. describirlo devuelve el 200 OK
  2. ESTABLECIMIENTO con el transporte: RTP/AVP: unicast: client_port = 4568: 4569 consiguió el mensaje 200 OK volver
  3. Sent PLAY, y recibió el mensaje OK

Después de que la forma de obtener las tramas de audio y video?

He buscado en blogs, pero todos dicen escuchar en client_port pero no recibo ningún paquete.

Hágame saber si estoy haciendo correctamente.

Respuesta

5

Puede o no saber esto, pero Android ha incorporado soporte para RTSP usando VideoView.

http://developer.android.com/reference/android/widget/VideoView.html

Esto puede reducir su tiempo de desarrollo ... o puede ser totalmente inútil si usted está tratando de rodar su propia pila RTSP.

+0

No funciona con el dispositivo y el emulador. Falla en PLAYER_INIT con PVMFFailure. – Vinay

+1

He encontrado que no funciona con el emulador, pero para trabajar en todos los dispositivos que he tenido a mano. Algunos de ellos requieren que tenga el permiso de bloqueo de activación establecido en su manifiesto (supongamos que se trata de uno) – haseman

+0

He establecido el permiso de activación de bloqueo en el archivo de manifiesto. Todavía falla con PVMFFailure. – Emre

3

RTSP solo se usa para iniciar la transmisión. Le da una descripción SDP de las transmisiones reales. Debe gestionar una conexión RTCP y una conexión RTP por canal (audio/video). Los puertos a usar son los de "puerto de cliente".

Es bastante complejo codificar una pila RTSP/RTCP/RTP desde cero. Puede echar un vistazo a la biblioteca live555 que implementa dicha pila en C++.

1

Ponga un sniffer en la red, debería ver el paquete UDP con el puerto de destino 4568 dirigido a su dirección IP.

Con un sniffer decente, podrá ver el diálogo rtsp. Tal vez le falta algo en las respuestas

También debe verificar el contenido de la respuesta de CONFIGURACIÓN, para ver si el puerto que solicitó fue aceptado.

Lo que debe verificar:

  • Escucha en UDP.
  • Reglas de firewall.
  • Rango de la solicitud de reproducción: no especifique ninguna para asegurarse de que el servidor reproduzca algo.

Si estás detrás de un router o firewall, es probable que no reciben nada, porque su router/firewall no sabe qué hacer con los paquetes UDP entrantes

+0

La respuesta de CONFIGURACIÓN es correcta, es decir, tiene éxito con 200 OK. ¿Cómo usar el sniffer? ¿Hay alguna documentación para usarlo en la plataforma Android? – Vinay

+0

"Si está detrás de un enrutador o firewall, probablemente no recibirá nada, porque su enrutador/firewall no sabe qué hacer con los paquetes UDP entrantes" --- ¿cómo manejar este caso? Actualmente estoy detrás de un firewall – Vinay

1

probar primero con un local de Darwin Streaming servidor instalado en su LAN. De esta forma, Firewall no importará. El streaming funcionará.

Si quieres probar desde un servidor externo a continuación:

1) Verificar los client_ports mencionados en la respuesta del servidor, algunos servidores sugieren diferentes puertos de la requested.you tienen que utilizar los puertos sugeridas por el servidor.

2) Si los puertos son correctos, puede enviar paquetes vacíos de 64 bytes desde cada uno de los puertos UDP al servidor (denominados "abridores de puerta").

3) Si los dos anteriores no lo arreglan, compruebe los registros del lado del servidor. El servidor podría estar cerrando los puertos UDP.

Cuestiones relacionadas