My friend helped me to find possible reason of the problem - when movie starts to play, fmod calls callback to feed data. But it seems like there is no data in the buffer yet (len - how many data fmod wants, numRead - how many data we read from buffer):
Loading library FMOD_MOD
FmodSoundManager:start OK
Vorbis Headers: 3 Theora Headers : 3
Texture: Europe.ogg: Loading 1 faces(PF_B8G8R8,352x288x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,352x288x1.
Latency: 2.97215
len - 16384 numRead - 0
len- 16384 numRead- 0
len- 16384 numRead- 0
len- 16384 numRead- 0
len- 16384 numRead- 0
len- 16384 numRead- 0
len- 16384 numRead- 0
len- 16384 numRead- 0
len- 16384 numRead- 0
len- 16384 numRead- 0
Audio timer- 0.008
Audio timer- 0.008
Movie time- 0.008
Audio timer- 0.035
...
Then after 0.5 sec fmod tries to call callback again:
Movie time- 0.49
Audio timer- 0.49
len- 16384 numRead- 16384
len- 16384 numRead- 16384
len- 16384 numRead- 10752
len- 16384 numRead- 0
len- 16384 numRead- 0
Audio timer- 0.528
FMOD timer- 22579
Audio timer- 0.528
and sound starts to play.
Also, there is parameter when initialising fmod:
decodebuffersize
[in] Optional. Specify 0 to ignore. For streams. This determines the size of the double buffer (in PCM samples) that a stream uses. Use this for user created streams if you want to determine the size of the callback buffer passed to you. Specify 0 to use FMOD's default size which is currently equivalent to 400ms of the sound format created/loaded.
I think it defines 'len' value. And I guess fmod won't start play sound until it fill buffer with this amount of data. When I changed 'decodebuffersize' to 2048, audio delay decreased, but not disappeared. If I change 'decodebuffersize' to any value less then 2048, then sound becomes crappy.
So, is there any easy way to fill the buffer with certain amount of data, and only then start to play movie?