7
votes

Comment forcer le client à changer de transport RTP de UDP en TCP?

Si le client souhaite regarder un flux sur mon serveur RTSP, il essaie d'abord de configurer un flux via le protocole UDP. Comment puis-je dire que mon serveur prend uniquement en charge RTP / AVP / TCP et qu'il doit changer de transport?

Je souhaite mettre fin à la prise en charge UDP sur mon serveur, mais tous les clients essaient d'essayer de configurer la session sur UDP et, plus tard, ils le font sur TCP ... et je veux les changer en TCP dès que possible dans Protocole RTSP.

Comment puis-je faire ça?


0 commentaires

6 Réponses :


4
votes

OK Octo est d'envoyer "400 mauvaises demande" comme réponse à la demande de configuration du client ... et passe automatiquement au protocole TCP. Ceci est pour Realone et QuickTime.

Mais je ne suis pas sûr que cela fonctionnera sur tous les autres joueurs, car c'est un hack.

Toute autre idée? = |


4 commentaires

Y a-t-il une documentation à ce sujet? BADREQUEST Cause QuickTime d'entrer dans un état "Configuration" alors n'envoie jamais une autre demande et affiche «BADREQUEST» ou une connexion. UnsupportedTranport quitte juste QuickTime Afficher «UnsupportedTransport». Je peux obtenir VLC pour commuter mais pas QuickTime ou réel. La liste de diffusion semble indiquer qu'elle n'est pas prise en charge dans QuickTime .apple.com / Archives / Streaming-Server-Dev / 2007 / FEB / ... Seuls les tunneles HTTP sont pris en charge ...


Quand envoyez-vous BADREQUEST? Quel protocole Quicktime essaie-t-il d'initier?


Pendant la configuration, la demande HTTP avec X-RTSP-tunneled dirigé.


Il y a un code de réponse spécial juste pour ce cas. 461 - Transport non pris en charge. websitepulse.com/kb/rtsp_status_codes.html



1
votes

Quel client se connecte à votre serveur? Certains clients peuvent être déclenchés à travers la méthode URI de l'URL. Par exemple, vous pouvez spécifier RTSPT: //myhost/path.sdp.

Si vous avez la lutte contre les clients / serveurs, vous pouvez utiliser l'en-tête requis sur les clients et non pris en charge sur des serveurs pour indiquer que l'UDP n'est pas pris en charge; Mais la plupart des clients que j'ai vus ne l'utilisent pas.


7 commentaires

Joueurs multimédias qui soutiennent le RTSP. Comme RealOne, QuickTime, VLC, Player Media Player Clasic ... Quelle méthode que je ne vous comprends pas? Je n'ai pas de contrôle sur les clients, j'ai écrit le serveur, donc c'est le seul contrôle que j'ai. Je ne peux pas envoyer non pris en charge l'en-tête de transfert. = \


Windows Media Player prend en charge l'utilisation de RTSPT dans les URL et certains joueurs du RTSP du combiné mobile prennent également en charge cette méthode de signalisation pour tenter le transport RTP entrelacé au lieu de l'UDP standard. Cependant, VLC et QT ne supportent pas cette signalisation.


Si je vous comprends tout ce que je dois faire, c'est ajouter le "T" dans "rtspt"? = |


Correct. Je sais que Windows Media Player sur Windows prend en charge cela et à Winmo. J'ai essayé cela contre qt, mais cela ne semblait pas reconnaître le RTSPT; Cela semble être une implémentation spécifique du fournisseur si elle de la reconnaître.


@ J.fritzbarnes monsieur s'il vous plaît répondez sur cette Stackoverflow.com/Questtions/14337755/...


@ J.fritzbarnes est là un moyen d'envoyer la demande de déchirement du serveur proxy au serveur arrière


BTW, pour forcer VLC (semble utiliser la bibliothèque Live555) au client pour utiliser TCP pour de tels flux, voir wowza.com/forums/.../a>



1
votes

Vous pouvez essayer de transmettre l'en-tête "Transport" dans une réponse à la demande de décrire et d'indiquer que votre serveur prend uniquement en charge le transport RTP / AVP / TCP, et le client doit savoir que UDP n'est pas pris en charge.


1 commentaires

J'utilise 2 programmes Live555 "TESTMPEG2TRANSPORTSPREDREAMER" dans le répertoire de test de Live 555 et serveur proxy dans le répertoire de serveur proxy de Live 555, au programme de serveur proxy, je donne l'URL de "TestMpeg2transportStreamer" RTSP Server et puis-je envoyer le C- > A: Configuration RTSP: //audio.example.com/twister/audio.en RTSP / 1.0 CSEQ: 1 Transport: RTP / AVP / TCP; Unicast; client_port = 3056-3057 à "TestMpeg2TransportStreamer" à partir du serveur proxy.



8
votes

Autant que je sache, il n'y a pas de contrôle au côté serveur pour la préférence de type de transport. Le serveur doit être effectué générique qu'il devrait prendre en charge RTP via UDP, RTP sur TCP, RTP sur RTSP et RTP sur RTSP sur http (s). Et le choix de ses clients qui transportent pour choisir. Le champ de transport est d'abord envoyé dans la demande de configuration

1) udp xxx

2) TCP xxx

3) RTP sur RTTP et RTP sur RTTP sur http (s) xxx

Comme nous le voyons "Type de transport" est envoyé par côté client.

Si vous Voulez-vous priser uniquement le serveur TCP que vous pouvez envoyer "400 mauvaises demande" ou "461 Transport non pris en charge" En réponse à la demande de configuration Comme suggéré par vous ou une autre solution consiste à envoyer 200 OK mais ne transmettez aucun paquets RTP. Le client réalise et apprendra à savoir que c'est derrière le proxy et qu'il enverra à nouveau la demande de configuration avec le paramètre RTP / AVP / TCP (pas un cas idéal).


12 commentaires

@Alam monsieur j'utilise 2 programmes Live555 "TestMpeg2TransportStrereamer" dans le répertoire de test de Live 555 et serveur proxy dans le répertoire de serveur proxy de Live 555, au programme de serveur proxy, je donne l'URL du serveur RTSP "TestMpeg2TransportStreamer" et puis-je envoyer Le C-> A: Configuration RTSP: //audio.Example.com/twister/audio.fr RTSP / 1.0 CSEQ: 1 Transport: RTP / AVP / TCP; Unicast; client_port = 3056-3057 à "TestMpeg2TransportStreamer" de Proxy Server s'il vous plaît guide


@Alam je veux TestMpeg2TransportStreamer uniquement pour diffuser des paquets TCP, comme maintenant, lorsque je vois dans Wireshark IT Stream, le paquet UDP, je souhaite qu'il diffuse de la paquette TCP que je peux voir dans Wireshark


@Ajinkya. Assurez-vous que vous utilisez -t option sur votre serveur proxy? et TestMpeg2TransportStreamer n'utilise pas d'adresse de multidiffusion


@Alam monsieur s'il vous plaît répondez à ce Stackoverflow.com/Questtions/14337755/...


@Alam est là un moyen d'envoyer la demande de déchirement du serveur proxy sur le serveur d'extrémité arrière


L'exemple 2 est superficiel, devrait être exactement comme exemple 3 et l'exemple 3 nécessite les en-têtes HTTP et pour être codé de base64 pour la variation HTTP.


@Jay Exemple 2 représente RTP sur TCP autre que HTTP (TCP). Par exemple 3, vous avez raison pour HTTP mais n'est pas lié à la question posée.


@Alam incorrect qui serait réellement RFC4571 et spécifié dans le SDP. Il y a en fait un problème lorsque RFC4571 et RTSP sont utilisés ensemble, mais le GT n'a pas encore répondu à mon errata. Le RTSP utilise les ports RTSP et un en-tête entrelacé. Postez votre référence.


De plus, si c'était autre que HTTP n'aurait pas le profil RTP et serait considéré comme un TCP indépendant ... veuillez mettre à jour votre réponse ou poster votre source ....


@Alam En outre, le serveur ne contrôle que ceci et non le client ... Le client peut demander à FOO Transport, le serveur répondra avec non supportétransport. À peu près toutes vos informations, c'est incorrect!


@Jay alors pourquoi ne postez-vous pas de réponse correcte? Lisez la question et donnez une bonne réponse courte et nette. Je vais volontiers upvotez vous. Cette communauté a besoin de bonnes réponses et il peut y avoir plus d'une bonne réponse. Je crois toujours au contexte à la question posée à ma réponse est correcte. Vous êtes libre de télécharger ma réponse.


Cela ressemble à des avis de sons, je me demande simplement où vous obtenez votre information et pourquoi vous pensez que c'est ainsi que vous avez décrit.



7
votes

développer la réponse à Android, Pour les clients Android, ils tenteront toujours d'établir d'abord une connexion UDP.

Pour OpenCore et Stagefright, je peux confirmer que si je retourne "461 Transport non pris en charge" de mon serveur en réponse à la première demande de transfert UDP, les deux clients tenteront immédiatement d'établir une connexion basée sur TCP sur la Port RTSP.

Toutes les autres réponses sont détaillées ici: http://www.ietf.org/rfc/rfc2326 .txt


0 commentaires

4
votes

Si vous avez utilisé FFMPEG, vous pouvez forcer le protocole de la couche de transport RTSP RTSP.

av_dict_set(&format_opts, "rtsp_transport", "tcp", 0);
err = avformat_open_input(&ic, is->filename, is->iformat, &format_opts);


0 commentaires