begin process at 2010 09 03 00:31:53
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Multimedia

 > JMF ET RTP

JMF ET RTP


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :20 503 / 9 733

Auteur : indiana_jules

Ecrire un message privé
Commentaire sur cette source (46)
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

Les Membres Club peuvent 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

 Sources du même auteur

UNE SEULE INSTANCE DE PROGRAMME SANS SOCKET
Source avec Zip Source avec une capture JTABBEDPANE FERMABLE AVEC GESTION DU DRAG AND DROP
Source avec Zip OBSERVER ET OBSERVABLE EN RMI
Source avec Zip Source avec une capture HEADER POUR LES LIGNES D'UNE JTABLE
LIRE ET ÉCRIRE UN FICHIER BMP

 Sources de la même categorie

SELECTION DANS UNE IMAGE par marwenjava
Source avec Zip Source avec une capture TRAITMENT D'IMAGE EN JAVA par marwenjava
FLV TO MP3 par beeline
Source avec Zip SWT CUSTOM FILE BROWSER par grandtix
Source avec Zip Source avec une capture PROGRAMME COMPLET D'AIDE À L'APPRENTISSAGE DE TEXTE par cali70

 Sources en rapport avec celle ci

LIRE LES FICHIERS .WAV par Julien39
Source avec Zip Source avec une capture LECTEUR AUDIO AVEC JAVAFX par puccino1er
Source avec Zip JOUER UN SON WAV (A PARTIR DU CODE SOURCE DE NOUNOU21) par Femli
SIMULATEUR VIDEO par PCBill
Source avec Zip Source avec une capture LECTEUR VIDEO UTILISANT L'API JMF par Shamamatt

Commentaires et avis

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.

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

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

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.

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à :)

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

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à

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

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

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.

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.

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à

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

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

Commentaire de wawaaa le 14/11/2007 15:41:20

merci
A quoi correspond UtilitiesMedia?

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;
}
}

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

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)

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

Commentaire de sadlisa888 le 21/07/2008 12:25:17

merci pour le code c est fort interessant

Commentaire de math_gury le 04/05/2009 11:26:58

Merci, une mine d'or !!
;)

Commentaire de buzard65 le 25/05/2009 16:39:59

Bonjour,

Avant tout merci a tous de faire vivre cette partie du site.
En fait j'aurai voulu clarifier les choses pour être sûr d'avoir tout bien compris. L'arborescence (enfin les liens entre les classes s'effectue de la façon suivante) :
On veut envoyer au serveur à ce moment on crée un objet de type RTPWriter et il faut absolument utiliser dans ce cas les classes ICaptureMedia,AbstractCaptureMedia,VideoCapture,SoundCapture,RtpSendMedia et RtpWriter

On veut lire sur un serveur à ce moment on crée un objet de type RTPReader et il faut absolument utiliser dans ce cas les classes
ICaptureMedia,AbstractCaptureMedia,VideoCapture,SoundCapture,RtpReceiveMedia et RtpReader

C'est bien cela?

Commentaire de indiana_jules le 25/05/2009 18:06:55

Bonsoir,

Dans le cas d'une émission (création d'un serveur), il faut utiliser les classes suivantes RTPWriter et ICaptureMedia. AbstractCaptureMedia, VideoCapture et SoundCapture sont des classes pour faciliter la création d'un ICaptureMedia

Dans le cas de la récéption (création d'un client), la classe RtpReader suffit.

Rappel de l'exemple :
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 !!!!!

Voili voilà

Commentaire de buzard65 le 26/05/2009 09:51:18

Avant tout merci indiana pour ta réponse rapide!!

hélas celle-ci ne me satisfait pas totalement. Cela me paraît toujours un peu flou, j'ai un peu de mal avec l'exemple que tu donne. D'après ce que j'ai vu (ce n'est peut-etre qu'un détail) pour créer un RTPWriter il faut inverser new VideoCapture() et new SoundCapture() mais également il faut rajouter l'adresse IP en 3eme paramètre.
Egalement quand tu parle de création de serveur qu'entend tu exactement par la?? et de création de client??
A propos du composant graphique comment se fait-il qu'il ne se lance pas (pas même une demi-seconde...)?

Merci d'avance pour tes réponses et veuillez m'excuser si mes questions paraissent enfantines...

Commentaire de indiana_jules le 26/05/2009 11:03:26

Bonjour,

Cela fait longtemps que je ne me suis pas penché sur cette source.

En ce qui concerne RtpWriter, voici ce qu'on a au niveau du constructeur par défaut :
RtpWriter(ICaptureMedia audio, ICaptureMedia video, String ip)

Le premier argument correspond au flux audio, le second au flux video, et le dernier à l'adresse ip de capture de ces flux (127.0.0.1, localhost ...)

Je parle de client / serveur car RTP repose sur cette approche : nous avons une machine qui capturent les flux pour les transmettre sur le réseau (le serveur, car c'est une opération centralisée) et une machine qui reçoit ce flux par le réseau (le client, qui se contente d'afficher)

En ce qui concerne RtpReader, on a:
RtpReader(String ip)

L'argument correspondant à l'adresse ip de la machine d'où provient la capture de flux.

RtpReader est un composant Swing, et il ne s'affiche uniquement si un flux audio / vidéo est présent (voir le code:
//Nous créeons un timer afin de s'assurer que toutes les 30 secondes
//nous puissons avoir la video et l'audio
time = new Timer(30000, new ActionListener() {
/* (non-Javadoc)
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
public void actionPerformed(ActionEvent e) {
add(getMediaComponent(), BorderLayout.CENTER);
validate();
if(rm.isReady() && rm2.isReady()){
time.stop();
}
}
});

time.start();)

Du coup, si rien ne s'affiche, peut-être que l'adresse ip est mauvaise ou que le flux n'est pas lancé.

Voilou

Commentaire de buzard65 le 26/05/2009 12:36:33

Par curiosité on pourrai très bien "virer" le flux audio non? c'est a dire que dans toutes les classes on enlève tout ce qui se rapporte à l'audio et uniquement à l'audio.
Je travaille actuellement en local et je n'ai rien modifié de ce que tu avais fait tout en utilisant le "main exemple" que tu proposai (avec modifications au niveau des paramètres) et cela ne donnai pas tout a fait le résultat escompté...est-ce que tu aurai une idée?

Mon objectif est seulement d'envoyer une image de type BufferedImage via RTP.

En fait je cherche juste a faire une connection RTP simpliste avec un seul envoi d'une image...le seul code source que je trouve c'est le tien qui est bien plus complet et bien plus complexe...

Merci de tes réponses!!
Buzard

Commentaire de indiana_jules le 26/05/2009 13:52:33

Dans ce cas, il ne faut pas utiliser RtpWriter, mais plutôt RtpSendMedia de la façon suivante :
RtpSendMedia r1 = new RtpSendMedia(ip);
r1.addCaptureMedia(new VideoCapture());

Voili voilà

Commentaire de buzard65 le 26/05/2009 15:16:36

Quel est l'utilité de "addCaptureMedia"?? Pareillement je ne vois pas comment modifier "VideoCapture" pour ne prendre qu'une image...Mon but est tout de meme "d'écrire" sur le serveur le fichier que je veux...
Vraiment désolé de ne pas comprendre mais là je suis un peu perdu...

Merci en tout cas!!!

Commentaire de indiana_jules le 26/05/2009 15:32:38

addCaptureMedia est là pour spécifier le flux à utiliser (au départ, on pouvait en mettre plusieurs, le nom est resté ...)

Que veux-tu dire par "prendre qu'une image" et "ecrire sur le serveur de fichier" ? RTP est un protocole en quelque sorte de streaming audio / vidéo. Es-tu sûre que c'est ce que tu veux faire ?

Commentaire de buzard65 le 26/05/2009 15:40:27

Ok en fait j'ai voulu simplifier un poil mon problème.
Je vais t'expliquer ce que je vise comme cela tu y verra plus clair.
J'ai un poste client qui lance l'application que je veux créer (celle qui me pose problème pour le moment) et qui prend des captures d'écran et les envoie a un serveur red5 qui ensuite crée une vidéo de toutes ces images.

Enfin mon problème actuel est l'envoie des images sur le serveur red5...comment pourrais-je résoudre cela?

Commentaire de indiana_jules le 26/05/2009 16:57:21

RTP va te créer un flux. Donc au pire, tu pourras enregistrer le flux que tu reçois (RtpReceiveMedia) dans un fichier vidéo (un exemple qui n'est pas basé sur RTP, mais tu peux extrapolé je pense : http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/guide/JMFCapturing.html).

Néanmoins, je ne sais pas comment faire un flux de capture d'écran en JMF. Je sais faire une capture simple (http://www.java-tips.org/java-se-tips/java.awt/how-to-capture-screenshot.html). Après il faut voir comment l'envoyer sur le réseau (car BufferedImage n'est pas serialisé, mais tu peux peut-être renvoyer un byte[] qui lui est serialisable) et le récupérer (la solution la plus simple je pense serait RMI, avec une méthode distante où tu passes ton tableau de bytes[] et qui va te l'enregistrer en tant qu'image côté serveur, puis générer la vidéo)

Voilou

Commentaire de buzard65 le 27/05/2009 09:35:10

En effet je pourrai extrapoler mais je n'y arrive pas du tout...pour les capture d'écran j'ai déjà réussi a les faire et j'ai également réussi a créer une vidéo a partir des images.
Mon seul problème est l'envoie de ces images a l'aide du protocole RTP sur le serveur red5 que j'ai...
J'avais pensé aux objets distribués a un moment mais ils ne conviennent pas pour l'application que je veux faire.
Tu me parle de sérialisation un terme qui est toujours rester obscure pour moi. Je vais regarder quelques tutos pour me remettre dans ce bain la et voir si je ne peux pas en tirer quelque chose.

Est-ce que tu pourrai me mettre en quelque lignes la méthode (voir un bout de code) pour créer un flux RTP? Car apparement une fois ce flux créé je n'aurai plus qu'a utiliser "RtpReader" sur le serveur et le tour sera joué :-)

Merci de ta patience une fois de plus et de tout le travail que tu fourni!!

Commentaire de buzard65 le 28/05/2009 10:36:39

Bijour,

Au niveau du fonctionnement de rtp j'aurai une petite question. J'ai eu beau lire des tonnes de docs dessus je ne vois toujours pas le lien entre rtp et rtcp. Ou plutôt non j'ai bien compris que rtcp était juste la pour donner des indications sur le réseau mais faut-il toujours implémenté rtcp dès que l'on implémente rtp?
Dernière petite question comment transformer ceci InetAddress.getLocalHost() en String?? J'aimerais faire ça pour l'envoyer à RtpReader mais je n'y arrive pas non plus...
Merci d'avance!!

Commentaire de indiana_jules le 28/05/2009 10:46:33

Bonjour,
Pour obtenir l'addresse IP : InetAddress.getLocalHost().getHostAddress();

Pour RTCP, je ne saurais te dire, peut-être que RTP l'utilise de manière caché, parce que, en somme, ce qui nous préoccupe, c'est d'envoyer via RTP.

Pour créer un flux (par exemple):
RtpSendMedia r1 = new RtpSendMedia(ip);
r1.addCaptureMedia(new VideoCapture());

Voilou

Commentaire de buzard65 le 28/05/2009 15:56:27

Ah oui en effet!!
Merci beaucoup!!

A propos de ta classe VideoCapture nous sommes bien d'accord qu'il faut une camera qui soit connecté au PC et que celle-ci soit enregistré dans JMFRegistry?

En tout cas merci beaucoup pour tes réponses!

Commentaire de indiana_jules le 28/05/2009 16:27:13

Il faut effectivement une camera enregistré dans JMFRegistry pour que cela fonctionne.

Bon courage pour la suite

Commentaire de samymand le 17/06/2009 08:52:15

salut la compagnie.....
je suis debutant en java et je travail actuellement sur un projet:
ton API m'interesse beaucoup sauf qu'a la place d'une webcam je souhaite utiliser une camera connecte a une carte video
voila...que me conseillez vous?
merci

Commentaire de indiana_jules le 17/06/2009 09:01:55

Bonjour,
je te conseille d'installer JmfRegistry qui te permettra de générer les devices JMF selon ton installation, et dans ce cas là; voir s'il te reconnait ta camera.

Voilou

Commentaire de samymand le 17/06/2009 16:11:27

ok! mais ou je trouve JmfRegistry
j'ai telecharge le code source mais j'ai du mal a le faire marcher

merci

Commentaire de indiana_jules le 17/06/2009 16:58:06

Normalement, quand tu installes JMF sur ton poste, JmfRegistry est installé également (vu sous mon Windows)

Lien de téléchargement de JMF : http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/download.html

Commentaire de samymand le 19/06/2009 09:49:49

bonjour.....
j'ai intalle JmfRegistry, le probleme c'est qu'il me signale une erreur "Capture device query unsuccesful" lorsque je click sur "Detect Capture Devices"
je suis sous windows vista....
merci

Commentaire de samymand le 19/06/2009 10:10:45

s'il vous plait............
je suis a genou et je le resterai while(Pas_solution(jmf)){}
voila: je voudrais d'abords pouvoir envoyer un flux provenant d'un fichier(audio ou vidéo)...
merci a vous tous
n'oubliez pas je suis a genou

Commentaire de indiana_jules le 19/06/2009 10:22:52

Salut,

as-tu installé jmf grâce à l'installeur pour windows, ou par le biais du fichier zip. Dans le dernier cas, il n'y a pas les fichiers jni nécessaire pour communiquer avec windows. Sinon, prie très fort :/

Pour pouvoir envoyer le flux depuis un fichier, je sais que sur le site de Sun, dans la section JMF, il donnait un exemple pour ça (au pire, regarde dans le code source de jmfregistry, qui a cette fonctionnalité)

Au pire des cas, je te suggère de te pencher sur http://jffmpeg.sourceforge.net/ qui est une surcouche à JMF mais est plus performant et multiplateforme. Il pourra certainement répondre à tes besoins.

Bon courage :)

Commentaire de samymand le 23/06/2009 14:00:27

salut,
merci beaucoup pour votre aide car j'ai un peu avancé
mais j'ai un autre problème du moins deux exceptions:

Exception in thread "main" java.lang.NullPointerException
        at java.awt.Container.addImpl(Container.java:1041)
        at java.awt.Container.add(Container.java:365)
        at StreamingClient.main(StreamingClient.java:43)
RTP Handler internal error: javax.media.ControllerErrorEvent[source=com.sun.media.content.unknown.Handler@117a8bd,message=Internal module com.sun.media.BasicRendererModule@19dfbff: failed to handle a data format change!]

je suis perdu
O'skour

Commentaire de samymand le 23/06/2009 18:06:04

Je n'arrive pas obtenir ma webcam comme device de capture avec ma classe Serveur
je suis trois fois perturbé

a l'aide

Commentaire de med_aboub le 03/03/2010 16:49:10

j'ai essayé le laibrairie, je lance le serveur rtp , avec l'adresse 127.0.0.1 et les port par deffaut puis j'ai lancé le client avec l'adresse 127.0.0.1 avec un renversement de port avec le serveur. le client m'affiche alors delais de 30s dépassé.
j'ai essayé de lire le flus RTP du serveur avec le JMF studio , ce dernier detecte un fklux mais de meme il m'affiche une delais d'attente de 60 szconde. une aide sera trés precieuse à l'étape ou je suis merci.

 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. jmf+rtp+flux video [ par BOBO1979 ] salut j'ai une application java qui recoit et transmet le flux audio via rtp et jmf mon problème que l'application ca marche avec les adresses ip loc JMF utilisation de RTPsocket [ par nicotine76120 ] Bonjour a tous, Je suis actuellement en train de réaliser une application java basé sur JMF pour faire de la transmission de voix audio via RTP. Pour Flux video a partir d une webcam [ par fraclot ] Salut tout le monde, Je souhaite creer un flux video a partir de ma webcam. J y suis plus ou moins arrive avec JMF, mais j ai trouve JMF pas tres soup applet video [ par glipper ] Bonjour, Je cherche à programmer un applet permettant de faire un programme de video-conférence très basique en Java. En cherchant un peu, j'ai trouv video conference sous java en utilisant la JMF et RTP [ par kapjoel ] Salut a tous je ss en charge de  developper une application sous java  qui permettrait de faire de la  videoconference  via le net. l'application est 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales