Bonjour,

Je ne programme pas le JAVA, mais j'ai besoin d'utiliser un module et je dois donc m'y mettre.
Le code du module provient d'un exemple fournit par le fabricant (Wowza streaming engine), et à priori permet d'injecter des metadata sous titres dans un flux vidéo.

Pour ma part j'aimerais faire un module qui accepte des variables depuis une url sur un port particulier et l'injecte dans le flux vidéo.
Je n'ai pas vraiment besoin de vérifier les chaines passées en arguments, car le port d'acces ne sera ouvert que pour 1 IP spécifique.
J'aimerais aussi pouvoir injecter l'heure GMT.

Je connais bien le serveur vidéo en question (Wowza) mais pas Java, et donc cherche de l'aide.
Voici le code en question :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package com.wowza.example.module;
 
import com.wowza.wms.amf.*;
import com.wowza.wms.client.*;
import com.wowza.wms.module.*;
import com.wowza.wms.request.*;
import com.wowza.wms.stream.*;
 
public class ModuleInjectData extends ModuleBase {
 
  public void setCaption (IClient client, RequestFunction function, AMFDataList params)
  {
    String streamname = params.getString(PARAM1);
    String text =  params.getString(PARAM2);
    String language = params.getString(PARAM3);
    String trackid = params.getString(PARAM4);
 
    IMediaStream stream = client.getAppInstance().getStreams().getStream(streamname);
 
    //essential code
    AMFDataMixedArray data = new AMFDataMixedArray();
    data.put("text", new AMFDataItem(text));
    data.put("language", new AMFDataItem(language));
    data.put("trackid", new AMFDataItem(trackid));
    stream.sendDirect("onTextData", data);
    getLogger().info("Caption: " + text);
  }
 
  public void injectMetaData(IClient client, RequestFunction function, AMFDataList params)
  {
    String streamName = params.getString(PARAM1);
    String data =  params.getString(PARAM2);
    IMediaStream stream = client.getAppInstance().getStreams().getStream(streamName);
    if (stream != null)
    {
      AMFDataList amfList = new AMFDataList();
 
      amfList.add(new AMFDataItem("@setDataFrame"));
      amfList.add(new AMFDataItem("onMetaData"));
 
      AMFDataMixedArray metaData = new AMFDataMixedArray();
 
      metaData.put("param1", data);
      metaData.put("param2", new AMFDataItem("data2"));
 
      amfList.add(metaData);
 
      synchronized(stream)
        {
        byte[] dataData = amfList.serialize();
        int size = dataData.length;
              long timecode = Math.max(stream.getAudioTC(), stream.getVideoTC());
              stream.setDataTC(timecode);
              stream.setDataSize(size);
              stream.startDataPacket();
              stream.addDataData(dataData, 0, size);
        }
    }
  }
}