Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

JMF ET RTP


Information sur la source

Catégorie :Multimedia Classé sous : jmf, rtp, video, audio Niveau : Initié Date de création : 12/05/2006 Date de mise à jour : 12/11/2007 16:26:12 Vu / téléchargé: 12 786 / 8 691

Note :
8,67 / 10 - par 3 personnes
8,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note

Description

Voici des classes permettant de faire une connection vidéo, audio (voir les deux en même temps) en RTP avec la librairie JMF (ci-dessous l'interface principale pour la gestion d'un flux de média)
 

Source

  • package projet.media;
  • //Importation des packages de JMF
  • import javax.media.CaptureDeviceInfo;
  • import javax.media.Format;
  • import javax.media.Processor;
  • /**
  • * <p>Titre : ICaptureMedia</p>
  • * <p>Description : Interface permettant de préciser les moyens de capture</p>
  • * <p>Société : MediaPlayer</p>
  • * @author Indiana_jules
  • * @version 1.0
  • */
  • public interface ICaptureMedia {
  • /**Méthode de configuration de processeurs
  • * @param p Processeur à configurer.
  • * @return Retourne le processeur configuré*/
  • public Processor configureProcessor(Processor p);
  • /**Méthode retournant un processor formaté sur le flux souhaité
  • * @param p Processor à formaté
  • * @return Retourne le processor formaté
  • */
  • public void formatProcessor(Processor p);
  • /**Méthode retournant le device info du processor
  • * @return Retourne le device
  • */
  • public CaptureDeviceInfo getDeviceInfo();
  • /**Méthode retournant le format du média sur le réseau RTP
  • * @return Rettourne le format
  • */
  • public Format getRTPFormat();
  • /**Méthode retournant le processor
  • * @return Retourne le processor
  • */
  • public Processor getProcessor();
  • /**Méthode initialisant le processor
  • * @param p Processor
  • * @return Retourne le processsor
  • */
  • public Processor realizeProcessor(Processor p);
  • }
package projet.media;

//Importation des packages de JMF
import javax.media.CaptureDeviceInfo;
import javax.media.Format;
import javax.media.Processor;

/**
 * <p>Titre : ICaptureMedia</p>
 * <p>Description : Interface permettant de préciser les moyens de capture</p>
 * <p>Société : MediaPlayer</p>
 * @author Indiana_jules
 * @version 1.0
 */
public interface ICaptureMedia {
	/**Méthode de configuration de processeurs
	 * @param p Processeur à configurer.
	 * @return Retourne le processeur configuré*/
	public Processor configureProcessor(Processor p);
	
	/**Méthode retournant un processor formaté sur le flux souhaité
	 * @param p Processor à formaté
	 * @return Retourne le processor formaté
	 */
	public void formatProcessor(Processor p);
	
	/**Méthode retournant le device info du processor
	 * @return Retourne le device
	 */
	public CaptureDeviceInfo getDeviceInfo();
	
	/**Méthode retournant le format du média sur le réseau RTP
	 * @return Rettourne le format
	 */
	public Format getRTPFormat();
	
	/**Méthode retournant le processor
	 * @return Retourne le processor
	 */
	public Processor getProcessor();
	
	/**Méthode initialisant le processor
	 * @param p Processor
	 * @return Retourne le processsor
	 */
	public Processor realizeProcessor(Processor p);
}

Conclusion

J'ai reçu pas mal de demandes d'exemple de main. De mémoire (vue que cela fait un bail), de base il faut faire :

Serveur :
new RTPWriter(new VideoCapture(), new SoundCapture()); //Lance un serveur Vidéo / Audio

Client :
new RTPReader(adresseIP); //Lance un client Vidéo / Audio. C'est un composant graphique !!!!!

Voilà !!!!!
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

12 novembre 2007 16:26:13 :
Demande d'exemples de main

Commentaires et avis

signaler à un administrateur
Commentaire de aurao08 le 13/07/2006 10:08:52

Salut,

merci pour cet exemple, moi c'est le ReceiveMedia.java qui m'a beaucoup servi, puisque j'ai quelque soucis avec mes receveur vidéo.

Bonne continuation.

signaler à un administrateur
Commentaire de cooluhuru le 19/10/2006 04:55:54

salut, je débute pas mal en JMF,

ton code m'interpelle quand aux possibilité de streaming evoluées.

Apr contre, là ça fait 6 heures queje cherche comment capturer ma cam pour la mettre dans tes fonctions,
plsu precisement comment je fais pourrecuper le Processor.....

merci en tout cas, et tchuz

signaler à un administrateur
Commentaire de indiana_jules le 13/11/2006 13:12:31

Pour récupérer, normalement, il suffit de suivre le code ci-dessous (normalement, ca marche) :
package projet.media;

//Importation des packages nécessaires
import java.awt.BorderLayout;
import java.io.IOException;

import javax.swing.JComponent;

//Importation des packages de la JMF
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.NotRealizedError;
import javax.media.Player;
import javax.media.Processor;


/**
* <p>Titre : WebCam</p>
* <p>Description : Classe affichant une WebCam</p>
* <p>Copyright : Copyright (c) 2006</p>
* <p>Société : MonProjet</p>
* @author Indiana_Jules
* @version 1.0
*/
public class WebCam extends JComponent {
//Constantes
/**Constante de sérialisation*/
private static final long serialVersionUID = 1L;

//Variables locales
private Player player;
private Processor processor;

/**Constructeur par défaut
* @throws IOException Erreur entrée sortie
* @throws NotRealizedError Impossible d'initialiser le flux
* @throws NoPlayerException Impossible de créer un player
*/
public WebCam() throws IOException, NoPlayerException, NotRealizedError {
setLayout(new BorderLayout());
start();
}

/**Méthode retournant le player utilisé
* @return Retourne le player
*/
public Player getPlayer() {
return player;
}

/**Méthode retournant le processor utilisé
* @return Retourne le processor
*/
public Processor getProcessor() {
return processor;
}

/**Méthode lançant le flux de la webcam
* @throws IOException Erreur entrée sortie
* @throws NotRealizedError Impossible d'initialiser le flux
* @throws NoPlayerException Impossible de créer un player
*/
public void start() throws IOException, NoPlayerException, NotRealizedError {
processor = Manager.createProcessor(UtilitiesMedia.getDefaultVideoDevice().getLocator());
UtilitiesMedia.configureProcessor(processor);
UtilitiesMedia.realizeProcessor(processor);
processor.start();

player = Manager.createPlayer(processor.getDataOutput());
player.start();

add(BorderLayout.CENTER, player.getVisualComponent());
validate();
}

/**Méthode arrêtant le flux de la webcam*/
public void stop() {
player.stop();
player.close();
player.deallocate();
player = null;

processor.stop();
processor.close();
processor.deallocate();
processor = null;

removeAll();
validate();
}
}

signaler à un administrateur
Commentaire de baba njida le 25/03/2007 23:26:55

merci de publier votre code,
Je travaille sur un projet de voix et video sur ip,
et ce code peut me resoudre quelques problème.
Mais je n'arrive pas à trouver la methode "main" afin d'éxecuter le code.
Svp aide moi afin de voir ce code en marche et merci.

signaler à un administrateur
Commentaire de indiana_jules le 29/03/2007 08:32:07

C'est normal, il n'y est pas du fait que c'est censé être une api :)

En revanche, je te confirme que ça marche, j'e l'ai utilisé pour un projet. Là je n'y pas assez, mais je verrais pour te retrouver les mains client / serveuyr

Voilà :)

signaler à un administrateur
Commentaire de cesar05 le 23/04/2007 20:45:34

salut
bon j'ai volu utiliser ton api pour le transfert de la voix et ca marche bien .mais par analogie avec la video na pas marche.
En effet g une erreur a ce niveau:
CaptureDeviceInfo cam;
....
....
cam=(CaptureDeviceInfo)deviceList.get(0);//ca retourne une erreur
any suggestions et merci

signaler à un administrateur
Commentaire de indiana_jules le 24/04/2007 08:19:22

Humf, ca va dire que La JMF n'a pas su détecter ta Webcam. De souvenir, lorsqu'on installe la JMF, il y a un exe qui permet de regénérer les fichiers de "device". Essaye de les regénérer et de les utiliser.

Voilà

signaler à un administrateur
Commentaire de sifouane le 17/05/2007 15:23:07

Salut pour tous,
j'ai telechargé ces classes(RTP_JMF),mais j'ai auune idée pour les utiliser,si qq un a une idée sur l'utilisation de ces classes pour le trnsfert de l'audio entre deux clients (Téléphonie),je serai trés reconnaissant de son aide.
Merci.
algo571@yahoo.com

signaler à un administrateur
Commentaire de rocky_appolo le 22/05/2007 15:10:03

merci beaucoup indiana_jules pour ce précieux code, je vous serai bien reconnaissant si tu nous fait un petit exemple d'exploitation de ces fonctionnalités (un truc comme une main classe) pour voir plus clair comment ça marche. Je tiens à te dire que le code est assez clair et super bien commenté, merci encore ;)

signaler à un administrateur
Commentaire de sinseman21 le 01/11/2007 01:45:54 10/10

allez, petit commentaire de ma part, pour dire à indiana-jules que tu as fais un remarquable boulot, voila plusieurs jours que je travaille sur tes sources pour creer un serveur/client streaming MP3 dans le cadre d'un projet. une webradio en quelque sorte.
Petit souci, je souhaite compresser mes fichiers audio en MP3, mais impossible de le faire. j'ai toujours une erreur a la con qui dit qu'il ne peut pas faire cette operation. bien entendu, j'ai recuperer tous les formats de compression dans la classe AbstractCaptureMedia, la methode format. Mais je n'ai aucun choix sur le mp3, de nombreux choix sur le mpegaudio/rtp, dvi/rtp ect.... mais ca ne m'interesse pas.
de plus, après de nombreux tests, j'ai remarqué que la compression en mpegaudio/rtp, 44100 Hz, 16-bits, Stereo, BigEndian, Signed avait les mêmes caractèristiques qu'un fichier encodé en MP3, 44100 Hz, 16-bits, stereo, debit: 128Kbps mais je ne suis pas certains que ce soit une compression en Mp3. Si quelqu'un avait une idée.
Et ne me faites pas le coup, install le plugin Mp3 fourni avec la librairie JMF, parce que je l'ai déjà fait, et suivi la procédure à la lettre.
Ca me fait chiez, parce que c'est le seul point bloquant sur mon projet.
Encore merci, pour ces sources. Je mettrai en ligne mon projet une fois fini.

signaler à un administrateur
Commentaire de wawaaa le 14/11/2007 14:41:22

Salut,
Ce code me semble très interressant. Le problème est que je n'arrive pas a le faire fonctionner. Je ne comprend pas comment faut installer l'api ou l'appeler dans un projet. J'ai tester avec un main serveur classique au meme endroit que les .java fournit, mais ca a pas l'air de fonctionner. Si quelqu'un a réussit, ce serait sympa de me donner un coup de main.

signaler à un administrateur
Commentaire de indiana_jules le 14/11/2007 14:46:17

Salut,
il faut utiliser mon API comme une librairie normale, mais surtout, il faut installer JMF afin de pouvoir l'utiliser.

Enfin, pour les lancer, tu peux faire par défaut (comme j'ai mis en conclusion) :
Serveur :
new RTPWriter(new VideoCapture(), new SoundCapture()); //Lance un serveur Vidéo / Audio

Client :
new RTPReader(adresseIP); //Lance un client Vidéo / Audio. C'est un composant graphique !!!!!

Sachant que les classes VideoCapture et SoundCapture sont des classes par défaut, et tu peux mettre les tiennes à la place (à condition d'utiliser l'interface ICaptureMedia)
Voili voilà

signaler à un administrateur
Commentaire de wawaaa le 14/11/2007 15:31:20

Merci bien, c'est sympa. Juste une petite question:
Ce genre d'ereur:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0
        at java.util.Vector.get(Vector.java:710)
        at VideoCapture.jbinit(VideoCapture.java:112)
        at VideoCapture.<init>(VideoCapture.java:45)
C'est du au fait qu'il trouve pas la web cam?
Merci

signaler à un administrateur
Commentaire de indiana_jules le 14/11/2007 15:34:38

oui certainement

essaie le code source de webcam ci-dessus pour voir si ça marche. Sinon, ça veut peut être dire que tu as un soucis

signaler à un administrateur
Commentaire de wawaaa le 14/11/2007 15:41:20

merci
A quoi correspond UtilitiesMedia?

signaler à un administrateur
Commentaire de indiana_jules le 14/11/2007 15:43:50

Euuuuuuuuuuuuuuuuuh euuuuh (je fais Hollande)
c'est une classe utilitaire que j'ai faite
Voici la source :

package projet.media;

//IMportation des packages nécessaires
import java.awt.Dimension;
import java.awt.Image;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Vector;

//Importation des packages de la JMF
import javax.media.Buffer;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Controller;
import javax.media.Format;
import javax.media.Player;
import javax.media.Processor;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.AudioFormat;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;

/**
* <p>Titre : UtilitiesMedia</p>
* <p>Description : Classe utilitaire sur la JMF</p>
* <p>Copyright : Copyright (c) 2006</p>
* <p>Société : MonProjet</p>
* @author Julien
* @version 1.0
*/
public class UtilitiesMedia {
/**Méthode retournant la capture d'une image sur un flux vidéo
* @param player Player
* @return Retourne l'image
*/
public static Image captureImage(Player player) {
Buffer buf = null;
BufferToImage btoi = null;
FrameGrabbingControl fgc = (FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");

buf = fgc.grabFrame();
btoi = new BufferToImage((VideoFormat)buf.getFormat());
return btoi.createImage(buf);
}

/**Méthode de configuration de processeurs
* @param p Processeur à configurer.
* @return Retourne le processeur configuré
*/
public static synchronized Processor configureProcessor(Processor p) {
//Attendre tant que le Processor n'est pas configuré.
while(p.getState() < Processor.Configured){
//Configuration du Processor
p.configure();
}

return p;
}

/**Méthode retournant le device audio par défaut
* @return Retourne le device
*/
@SuppressWarnings("unchecked")
public static CaptureDeviceInfo getDefaultAudioDevice() {
Vector<CaptureDeviceInfo> deviceList = CaptureDeviceManager.getDeviceList(new AudioFormat(AudioFormat.LINEAR,8000,8,1));
CaptureDeviceInfo device = null;

if(deviceList.size() > 0){
device = deviceList.get(0);
}

return device;
}

/**Méthode retournant le device vidéo par défaut
* @return Retourne le device
*/
@SuppressWarnings("unchecked")
public static CaptureDeviceInfo getDefaultVideoDevice() {
Vector<CaptureDeviceInfo> deviceList = CaptureDeviceManager.getDeviceList(new VideoFormat(VideoFormat.YUV));
CaptureDeviceInfo device = null;

if(deviceList.size() > 0){
device = deviceList.get(0);
}

return device;
}

/**Méthode retournant une liste de dimension disponible pour le device <u>vidéo</u>
* @param device Device vidéo
* @return Retourne une liste de dimensions
*/
public static Vector<Dimension> listOfSize(CaptureDeviceInfo device) {
Vector<Dimension> v = null;
Format[] f = device.getFormats();

if(f.length > 0){
HashSet<Dimension> hash = new HashSet<Dimension>();

for(int i = 0; i < f.length; i++){
if(f[i] instanceof VideoFormat){
hash.add(((VideoFormat)f[i]).getSize());
}
}

v = new Vector<Dimension>(hash);

if(v.size() <= 0){
v = null;
}
else{
Collections.sort(v, new Comparator<Dimension>() {
/* (non-Javadoc)
* @see java.util.Comparator#compare(java.awt.Dimension, java.awt.Dimension)
*/
public int compare(Dimension arg0, Dimension arg1) {
int cmp = 0;

if(arg0 instanceof Dimension && arg1 instanceof Dimension){
cmp = ((Dimension)arg0).toString().compareTo(((Dimension)arg0).toString());
}

return cmp;
}

});
}
}

return v;
}

/**Méthode initialisant le player
* @param p Player
* @return Retourne le player
*/
public static synchronized Player realizePLayer(Player p) {
//Attendre tant que le Player n'est pas réalisé.
while(p.getState() < Controller.Realized){
//Configuration du player
p.realize();
}

return p;
}

/**Méthode initialisant le processor
* @param p Processor
* @return Retourne le processsor
*/
public static synchronized Processor realizeProcessor(Processor p) {
//Attendre tant que le Processor n'est pas réalisé.
while(p.getState() < Processor.Realized){
//Configuration du Processor
p.realize();
}

return p;
}
}

signaler à un administrateur
Commentaire de ctoigo le 14/11/2007 15:56:40

Hi OK?, I am trying to use their classes to mount a chat on the web using applet, but giving this error, I wonder if it is possible uses-ló for this type of connection

signaler à un administrateur
Commentaire de ctoigo le 14/11/2007 16:39:46

javax.media.NotRealizedError: Cannot get visual component on an unrealized player
        at com.sun.media.BasicPlayer.getVisualComponent(BasicPlayer.java:491)
        at com.sun.media.MediaPlayer.getVisualComponent(MediaPlayer.java:48)
        at webcam.WebCam.start(WebCam.java:70)
        at webcam.WebCam.<init>(WebCam.java:39)

signaler à un administrateur
Commentaire de hamzagasmi le 05/02/2008 16:02:20

bonjour
je voudrais realiser un player video sur mobile en utilisant session rtp.si quelqu'un peut m'aider,car je suis pressé par ce projet.
merci

signaler à un administrateur
Commentaire de sadlisa888 le 21/07/2008 12:25:17

merci pour le code c est fort interessant

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

JMF et RTP [ par JajaneD ] Bonjour, je travaille sur un serveur de streaming. Il doit pouvoir diffuser en live des videos capturés par une webcam ou contenues dans des fichiers. lire cd audio avec jmf [ par offspring7786 ] slt Je dois faire une appli qui permet de lire un cd audiopour l'instant j'y arrive mais il ne lit qu'une seule chansonJe voudrai savoir comment on fa JMF et flux video [ par vivi_2701 ] Bonjour,J'ai recuperer le flux video de ma webcam grace a l'API JMF, en utilsant un MediaLocator et un Player qui me donne un Component. Ca marche tre realisation d'un player video streaming avec rtp [ par hamzagasmi ] Bonjour je voulais realiser un player video streaming avec rtp sur le mobile .si vous avez la solution n'hesitez pas de m'aider. JMF et RTP [ par sarafaiz ] Bonjour,je veux faire le transfert de son entre deux pc en RTP et en utilisant JMF, la source du son est un fichier(.rm),j'ai crée un MédiaLocator sur JMF - capture video [ par nomad56 ] salut, je commence &#224; voir ce qu'est JMF et j'aimerai savoir un truc: ok, j'ai lu quelquepart qu'on pouvait capturer de la video avec camera/webca Jmf problème d'exportation [ par kitue ] Bonjour mon programme fonction bien sous eclipse mais quand je l'exporte la partie video faite avec jmf ne fonctionne plus ! Je pens JMF infos video taille codec frame ... [ par kitue ] Bonjour j'aimerais savoir comment on trouve les informations sur une vidéo notamment la taille en pixel ( hauteur largeur ) grâce à Java Media Framewo JMF JNI OPENCV WEBCAM VoIP pblemme^2 [ par sassou001 ] jour xsalut tout le monde!!je doit réaliser une app de video confernce=&gt;voIP pour mon stage d'ete et je trouve des problemes!! la JMstudio n'arrive [JMF] Protocole RTSP/RTP (client/serveur) [ par SebFalquier ] Bonjour,Je développe actuellement un client MRCP. Or, le protocole MRCP s'appuie sur RTSP pour tunneler ses PDUs et RTP pour transporter le trafic aud


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,36 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.