I'm using wowza 3.1.0 build1410.
I'm running a custom module in which clients publish live from flash (h264) and that stream is put on a Stream class using playlists.
The module acts as a switcher.
One of the things recently added are cuepoints which the flash broadcaster sends with its broadcast at very high interval (every frame) with the position data of an object.
I listen to these cuepoints data using IMediaStreamCallback (stream.registerCallback("onCuePoint2", cuepointClientData))
I then inject this cuepoint to the Stream's class stream using the same method I always use for injecting which has been working for me for almost 2 years now:
public void injectCustomCuePoint(IMediaStream stream, String funcName, AMFDataObj dataObj)
getLogger().info("AppChannel "+doorIdStr+" injectCustomCuePoint "+funcName);
AMFDataList amfList = new AMFDataList();
byte dataData = amfList.serialize();
int size = dataData.length;
long timecode = Math.max(stream.getAudioTC(), stream.getVideoTC());
stream.addDataData(dataData, 0, size);
It usually works fine, but every once in a while I get reports that the application is not working.
And I always see in the error log the following warnings and errors:
WARN server comment 2012-11-22 13:44:44 - - - - - 389348.104 - - - - -- - - LiveReceiver.startDataPacket[liveapp/_definst_/Stream45]: Data packet sync issue.
ERROR server comment 2012-11-22 13:45:05 - - - - - 389369.288 - - - - -- - - addDataA[this.size:69 this.dataA.length:69 this.startDataLoc:69 this.dataLoc:69 data.length:79 offset:0 size:79 missing:0 ]: java.lang.ArrayIndexOutOfBoundsException
WARN server comment 2012-11-22 13:45:05 - - - - - 389369.289 - - - - -- - - LiveReceiver2: addDataData: parse data frame: java.lang.NullPointerException
After which I no longer get these cuepoints.
The only thing I see as different from my other cuepoint impementation is the frequency of the calls which is several times a second (depending on the client's camera frame rate) instead of once a second.
Other difference is that data comes from the client and in the other case data comes from another server.
What do these error mean?
Which one do you think is responsible for the module to stop working?
How would you suggest to fix? Is there a check I should be doing before calling stream.addDataData(dataData, 0, size);
Is the interval too high?