Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Audio crackling really bad #4055

Open
2 tasks done
chikinrais opened this issue Jun 3, 2023 · 36 comments
Open
2 tasks done

Audio crackling really bad #4055

chikinrais opened this issue Jun 3, 2023 · 36 comments

Comments

@chikinrais
Copy link

chikinrais commented Jun 3, 2023

  • I have read the FAQ.
  • I have searched in existing issues.

Environment

  • OS: Windows 10
  • scrcpy version: 2.0
  • installation method: scrcpy-win64-v2.0.zip
  • device model: oneplus 9R
  • Android version: 11

Describe the bug
I upgraded to 2.0 but found that the audio quality from audio forwarding was extremely poor.
Although there are no errors reported, the audio I hear is severely broken and completely unlistenable.
I've tried all three encoders, adjusting the buffer, adjusting the bitrate, but nothing works.
And for some reason, the EQ app in my phone is affecting the sound. Although the sound quality is still very bad after turning off EQ.
In contrast, sndcpy works perfectly, and the sound is not affected by EQ. So I don't think the reason is my device.
Can I ask if anyone has the same situation? How can I fix it?

@rom1v
Copy link
Collaborator

rom1v commented Jun 3, 2023

#3793?

@rom1v
Copy link
Collaborator

rom1v commented Jun 3, 2023

Is the sound ok in the recorded file when you record with scrcpy --record=file.mp4?

@chikinrais
Copy link
Author

Is the sound ok in the recorded file when you record with scrcpy --record=file.mp4?

I tried scrcpy --record=file.mp4 , and it reported an error, like this

D:\Program Files\scrcpy-win64>scrcpy --record=file.mp4
scrcpy 2.0 https://github.com/Genymobile/scrcpy
D:\Program Files\scrcpy-win64\scrcpy-server: 1 file pushed, 0 skipped. 40.1 MB/s (52867 bytes in 0.001s)
[server] INFO: Device: OnePlus LE2100 (Android 11)
ERROR: Failed to open output file: file.mp4
ERROR: Recording failed to file.mp4
INFO: Renderer: direct3d
ERROR: Recorder error
ERROR: Demuxer 'audio': stream disabled due to connection error
WARN: Killing the server...

@rom1v
Copy link
Collaborator

rom1v commented Jun 3, 2023

ERROR: Failed to open output file: file.mp4

Do you have write permissions in D:\Program Files\scrcpy-win64? It the system refuses to open the file.

Try this with scrcpy --audio-output-buffer=10: #3793 (comment)

@chikinrais
Copy link
Author

Just tried this exe file, and when I try scrcpy --audio-output-buffer=10, it seems to fix the problem.
But the pitch of the music I hear from my computer is a little higher than it should be.
And the sound is still affected by the EQ in the phone.
When I try to turn it on directly, the broken sound comes back.

Also I tried this exe file but opened it directly, and it was the same as above, slightly higher pitch, affected by EQ.
#3793 (comment)

When I use sndcpy, it seems to be playing the sound through VLC.
It doesn't automatically stop the playback on the phone, but the sound quality is clearer and doesn't interact with the EQ app.
The scrcpy v2.0 is different, it automatically mutes the playback on the phone, and the EQ app recognizes the current playback as another source, but the sound quality is a little muddy.
(I use an EQ called Wavelet, which keeps different presets for different playback devices and switches them automatically)
I don't know what the difference in principle is, just mentioning that there is such a situation, hope it helps.

As for read-only, the location where I installed the scrcpy seems to force read-only, trying to figure out how to fix that.

@chikinrais
Copy link
Author

chikinrais commented Jun 3, 2023

ERROR: Failed to open output file: file.mp4

Do you have write permissions in D:\Program Files\scrcpy-win64? It the system refuses to open the file.

Try this with scrcpy --audio-output-buffer=10: #3793 (comment)

I solved the read-only problem, and recorded a video
My situation is the same as the post above ( #3793 (comment) ), the audio I hear in the recorded video is normal (still a little worse than sndcpy, but perfectly normal sounding)
But the sound I hear in real time is very bad.

Edit: I used the original v2.0 exe file to record the video, but from this result, probably the same for other exe files: the recorded video sounds okay, but the audio heard in real time is not so good.

@rom1v
Copy link
Collaborator

rom1v commented Jun 3, 2023

Just for information, do you experience the same "pitch issue" with --audio-output-buffer=20 --audio-buffer=100?

@chikinrais
Copy link
Author

chikinrais commented Jun 3, 2023

I tried the numbers 10, 20, 50, 80, 100, with the following results:
The pitch problem exists in a very strange form:
First of all, at the very first moment (within 0.5 seconds after the sound starts), the pitch is normal for each case, then:
At 10/20/50, the pitch rises a little, and then maintains that strange pitch.
At 80, the pitch rises for about 4 to 5 seconds, then automatically drops, but still a tiny bit higher than the original. The difference is so small that I think most people probably won't notice it.
When set to 100, the pitch drops to the same level as the original after about 4 to 5 seconds. This of course brings about a 1 second touch delay.

I also tested some numbers larger than 100, like 200, 500, 1000, but generally the situation is the same as 100.

Also I tried to record the footage during the process, and I found that the recorded video had perfectly normal pitch in all cases. It seems that this is also a problem that exists only in real time audio.

@rom1v
Copy link
Collaborator

rom1v commented Jun 3, 2023

I tried the numbers 10, 20, 50, 80, 100

On which parameter? What was the value of the other parameter?

I'm interested specifically with these two options simultaneously: --audio-output-buffer=20 --audio-buffer=100

@chikinrais
Copy link
Author

I tried the numbers 10, 20, 50, 80, 100

On which parameter? What was the value of the other parameter?

I'm interested specifically with these two options simultaneously: --audio-output-buffer=20 --audio-buffer=100

I used "--audio-output-buffer" for all values when I tested.
"--audio-buffer" did not improve the broken sound in any way.

@rom1v
Copy link
Collaborator

rom1v commented Jun 4, 2023

OK, so now that I have a bit more time (I quickly posted the previous comments from my phone), here are some more explanations about the issues you experience with the audio player (which do not impact capture/recording).

The audio player buffers the decoded audio samples in the "audio buffer" (having a size determined by --audio-buffer, by default 50ms), totally under the control of scrcpy.

To play the sound, a (SDL) callback is called every 5ms to request 5ms of audio samples (which is 240 samples at 48000Hz). Scrcpy takes 5ms from its audio buffer to provide them to the system (this 5ms buffer is not under the control of scrcpy).

The root cause of your problem is that some audio systems (platform/card/drivers) can't handle such low buffering (5ms), so instead of requesting 5ms every 5ms, they request 5ms every… 10ms, or even more. This is obviously problematic, it causes #3793 (refs libsdl-org/SDL#7450) and "the audio you hear (that) is severely broken and completely unlistenable".

Therefore, I added an option --audio-output-buffer to let the user change the 5ms to another value, and it seemed that 10ms (480ms) were sufficient. However, it may not be sufficient either. This is probably what explains:

Just tried this exe file, and when I try scrcpy --audio-output-buffer=10, it seems to fix the problem.
But the pitch of the music I hear from my computer is a little higher than it should be.

If for example your system requests 480 samples every 512 samples (10.7ms), then there is still a problem: audio samples are consumed a bit slower than they are received/produced. As explained in the release blog post, a compensation mechanism allows to adjust the stream to compensate for clock drift to maintain the target latency. Therefore, this mechanism will "speed up" a bit the input stream to match the consumption speed, hence the slightly higher pitch you get. It can probably be observed if you comment SC_AUDIO_PLAYER_NDEBUG and with audio compensation logs shown in scrcpy --Vverbose.

So in your case, you might need even more than 10ms of audio output buffer. You might try --audio-output-buffer=15 (or 20).

In theory, it is better to have the lowest possible value for this "audio output buffer" (but not lower that what your system supports):

  • it allows a lower end-to-end latency
  • it reduces the probability of buffer underflow

If you increase the output buffer, you might need also to increase buffering in the internal scrcpy buffer (the "audio buffer") by the same amount (if the system requests samples less often, you need more buffering, so --audio-output-buffer=15 --audio-buffer=60 should more or less work in your case).

At 10/20/50, the pitch rises a little, and then maintains that strange pitch.
At 80, the pitch rises for about 4 to 5 seconds, then automatically drops, but still a tiny bit higher than the original. The difference is so small that I think most people probably won't notice it.

In theory, with an "audio output buffer" sufficiently large (20ms is already very high), the SDL callback should not miss samples, so this should not cause compensation… unless this indirectly causes buffer underflow that needs to be compensated by playing the input stream faster. To confirm, try with --audio-output-buffer=15 --audio-output=1000 (it will play the sound with 1 second delay, so that buffer underflow is very unlikely). If that works, also try with --audio-output-buffer=10 --audio-output=1000.

When I use sndcpy […] It doesn't automatically stop the playback on the phone

Yes, the API used to capture is different (playback capture), but it requires an app on the device and let applications to refuse to be captured.
In scrcpy, it captures the "remote submix" (as if you connected a bluetooth headset), and disables the sound on the device (currently, there is no solution to keep the audio on the device, see #3875 (comment)).

but the sound quality is clearer [in sndcpy]

The audio is raw (not encoded), and above all it does not attempt to keep the latency low (no compensation mechanism to maintain a target buffering level).

To summarize: your system/card/drivers does not support low latency "audio output", and this has consequences that can be worked around by increasing latency (adding delay to both "audio output" and "audio output buffer").

@chikinrais
Copy link
Author

Thank you for your detailed reply!
I tried adding "--audio-output" but it doesn't seem to improve, no matter how many values I set.
It seems that my computer is not powerful enough to support this audio transfer properly. My computer is an XPS15 9560, which is indeed a bit old.
Based on the fact that sndcpy still works (although using it requires another bat file, and leaves the VLC process behind), I'm going to use this as a replacement for now, until I get a new PC someday.
I hope these discussions will help you in your next development.

@rom1v
Copy link
Collaborator

rom1v commented Jun 4, 2023

I tried adding "--audio-output" but it doesn't seem to improve, no matter how many values I set.

It is not expected.

Please post the output of scrcpy --audio-output=200 --audio-output-buffer=15 -Vverbose.

Based on the fact that sndcpy still works (although using it requires another bat file, and leaves the VLC process behind),

If you let it running for several minutes, does the latency increase?

@chikinrais
Copy link
Author

chikinrais commented Jun 4, 2023

I tried adding "--audio-output" but it doesn't seem to improve, no matter how many values I set.

It is not expected.

Please post the output of scrcpy --audio-output=200 --audio-output-buffer=15 -Vverbose.

Based on the fact that sndcpy still works (although using it requires another bat file, and leaves the VLC process behind),

If you let it running for several minutes, does the latency increase?

In my own experience, sndcpy has not had any major latency problems over long periods of time.
For example, when I use the music player, the delay from touching to pausing a song is about 0.5 seconds or less, and there is almost no delay from touching to playing a song.
Compared to the direct output, the delay in the audio transfer to the computer is also very small
(Since sndcpy allows both the computer and the phone to play music at the same time, it's easy to compare and measure this latency, which I'm pretty sure is very small, at 0.2 seconds or less)
The above latency also does not change depending on the time of use.

Here is what happens after I use "scrcpy --audio-output=200 --audio-output-buffer=15 -Vverbose" as you said.
I only ran it for a short while because it was growing rapidly and I could hear a noticeable current noise continuously.

D:\scrcpy-win64-v2.0>scrcpy --audio-output=200 --audio-output-buffer=15 -Vverbose
scrcpy 2.0 https://github.com/Genymobile/scrcpy
DEBUG: ADB device found:
DEBUG: --> (usb) 4ef8d907 device LE2100
DEBUG: Device serial: 4ef8d907
DEBUG: Using server (portable): D:\scrcpy-win64-v2.0\scrcpy-server
D:\scrcpy-win64-v2.0\scrcpy-server: 1 file pushed, 0 skipped. 35.0 MB/s (52867 bytes in 0.001s)
[server] INFO: Device: OnePlus LE2100 (Android 11)
[server] DEBUG: Using audio encoder: 'c2.android.opus.encoder'
[server] DEBUG: Using encoder: 'OMX.qcom.video.encoder.avc'
DEBUG: Server connected
DEBUG: Starting controller thread
DEBUG: Starting receiver thread
INFO: Renderer: direct3d
DEBUG: Trilinear filtering disabled (not an OpenGL renderer)
DEBUG: Using icon (portable): D:\scrcpy-win64-v2.0\icon.png
DEBUG: Demuxer 'video': starting thread
DEBUG: Demuxer 'audio': starting thread
INFO: Initial texture: 1080x2400
VERBOSE: [Audio] Buffering: target=2400 avg=4919.824707 cur=5040 compensation=-2519
VERBOSE: input: key down code=113 repeat=0 meta=003000
VERBOSE: [Audio] Buffering: target=2400 avg=4728.318359 cur=5110 compensation=-2328
VERBOSE: [Audio] Buffering: target=2400 avg=5661.369140 cur=5963 compensation=-3261
VERBOSE: [Audio] Buffering: target=2400 avg=6733.333496 cur=8026 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=7764.580078 cur=9226 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=8615.125976 cur=8986 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=9171.074218 cur=9466 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=9585.924804 cur=9946 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 826 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10365.350585 cur=11040 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10815.715820 cur=11520 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 720 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10739.412109 cur=11040 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10880.240234 cur=10800 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10839.612304 cur=10560 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 720 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10803.797851 cur=10560 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 720 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10865.471679 cur=10800 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10858.726562 cur=10560 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10821.203124 cur=11520 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 720 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 960 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10945.962890 cur=10800 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10740.651367 cur=11040 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 960 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10740.224609 cur=11520 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 960 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 720 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10826.708007 cur=11280 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 720 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 720 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10564.031250 cur=10800 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10776.907226 cur=10800 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 960 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10794.259765 cur=10800 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 960 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10844.438476 cur=10800 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10722.170898 cur=11520 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 720 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10863.454101 cur=10800 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 960 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10707.849609 cur=11040 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10907.871093 cur=10320 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10877.569335 cur=11520 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10805.521484 cur=10560 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10476.925781 cur=9600 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 720 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10760.636718 cur=11520 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10783.318359 cur=11760 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 960 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 480 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10860.769531 cur=11040 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10840.080078 cur=11280 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 960 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10751.653320 cur=11280 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 960 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10680.302734 cur=10320 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10786.655273 cur=10800 compensation=-3840
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
DEBUG: [Audio] Buffering threshold exceeded, skipping 240 samples
VERBOSE: [Audio] Buffering: target=2400 avg=10742.164062 cur=10560 compensation=-3840
DEBUG: User requested to quit
DEBUG: quit...
DEBUG[server] DEBUG: Controller stopped
: Demuxer 'audio': end of frames
DEBUG: Receiver stopped
DEBUG: Demuxer 'video': end of frames
WARN: Killing the server...
DEBUG: Server disconnected
DEBUG: Server terminated

@rom1v
Copy link
Collaborator

rom1v commented Jun 4, 2023

[Audio] Buffering threshold exceeded, skipping 480 samples

Ouch, there is really a problem if you get this with an audio output buffer of 15ms.

@rom1v
Copy link
Collaborator

rom1v commented Jun 4, 2023

What I don't understand is that earlier you said:

Just tried this exe file, and when I try scrcpy --audio-output-buffer=10, it seems to fix the problem.

So at 10ms, you don't get the problem, but at 15ms youget the problem?

@chikinrais
Copy link
Author

Sorry, maybe I didn't express myself correctly.
I heard the pitch difference at "--audio-output-buffer=10" before, but the audio itself is clear.
When I tried "scrcpy --audio-output=200 --audio-output-buffer=15 -Vverbose",
there is also the same pitch change as in 10ms, and the music itself is clear too.
The "noticeable current noise" I mentioned at this point is not the sound I mentioned at the beginning, which is like the music exploding.
It was more like a short and frequent "lag" that sounded as if my headphones were not making good contact. I assume it's caused by latency.

@rom1v
Copy link
Collaborator

rom1v commented Jun 4, 2023

When I tried "scrcpy --audio-output=200 --audio-output-buffer=15 -Vverbose", there is also the same pitch change as in 10ms, and the music itself is clear too.

But in the logs you posted, the audio is completely broken, since it includes many lines like this one:

DEBUG: [Audio] Buffering threshold exceeded, skipping 826 samples

and an insane level of buffering:

VERBOSE: [Audio] Buffering: target=2400 avg=10751.653320 cur=11280 compensation=-3840

(11280 samples = 235ms!)

It is clear that the audio output does not consume audio at the expected rate.

@chikinrais
Copy link
Author

chikinrais commented Jun 4, 2023

I don't know much about software development, so I'm not sure to what extent you're referring to as "broken".
But "scrcpy --audio-output=200 --audio-output-buffer=15 -Vverbose" does cause frequent audio delays, which does not sound normal.
I don't know why, but when I set the audio-output-buffer to 10 at this point, I also get the same frequent delays.

I tried it again this time with "scrcpy --audio-output-buffer=100 -Vverbose", and this time there is no more "frequent delay" as mentioned above, although the pitch still increases for a few seconds. The logs look much more normal. Everything is back to the way it was at this time: #4055 (comment)
Maybe it's because my PC is old and can't handle too low buffer size?
I hope this can give you a reference.

D:\scrcpy-win64-v2.0>scrcpy --audio-output-buffer=100 -Vverbose
scrcpy 2.0 <https://github.com/Genymobile/scrcpy>
DEBUG: ADB device found:
DEBUG:     -->   (usb)              4ef8d907            device  LE2100
DEBUG: Device serial: 4ef8d907
DEBUG: Using server (portable): D:\scrcpy-win64-v2.0\scrcpy-server
D:\scrcpy-win64-v2.0\scrcpy-server: 1 file pushed, 0 skipped. 66.1 MB/s (52867 bytes in 0.001s)
[server] INFO: Device: OnePlus LE2100 (Android 11)
[server] DEBUG: Using audio encoder: 'c2.android.opus.encoder'
[server] DEBUG: Using encoder: 'OMX.qcom.video.encoder.avc'
DEBUG: Server connected
DEBUG: Starting controller thread
DEBUG: Starting receiver thread
INFO: Renderer: direct3d
DEBUG: Trilinear filtering disabled (not an OpenGL renderer)
DEBUG: Using icon (portable): D:\scrcpy-win64-v2.0\icon.png
DEBUG: Demuxer 'video': starting thread
DEBUG: Demuxer 'audio': starting thread
INFO: Initial texture: 1080x2400
VERBOSE: [Audio] Buffering: target=2400 avg=17100.707031 cur=21120 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=17866.093750 cur=17245 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=17154.027343 cur=17245 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=16443.871093 cur=17245 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15327.012695 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15239.000000 cur=12464 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15553.736328 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15399.411132 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15537.080078 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15431.949218 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15281.342773 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15461.718750 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15416.541992 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15414.844726 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15349.088867 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15357.570312 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15395.247070 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15353.577148 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15358.489257 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15446.402343 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15335.339843 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15345.792968 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15411.747070 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15370.380859 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15304.698242 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15384.438476 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15400.740234 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15404.073242 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15391.725585 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15298.462890 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15426.650390 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15324.053710 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15448.132812 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15334.271484 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15297.318359 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15187.123046 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15492.509765 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15355.010742 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15266.742187 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15453.451171 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15303.549804 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15256.221679 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15197.168945 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15161.458007 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15355.154296 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15438.241210 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15455.224609 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15251.287109 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15373.518554 cur=17264 compensation=-3840
VERBOSE: input: touch [id=finger] down position=318,2157 pressure=1.000000 action_button=000001 buttons=000001
VERBOSE: input: touch [id=finger]   up position=318,2157 pressure=0.000000 action_button=000001 buttons=000000
VERBOSE: [Audio] Buffering: target=2400 avg=15270.528320 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15249.469726 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15327.219726 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15389.041015 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15445.166992 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15413.158203 cur=17264 compensation=-3840
VERBOSE: input: touch [id=finger] down position=527,2157 pressure=1.000000 action_button=000001 buttons=000001
VERBOSE: input: touch [id=finger]   up position=527,2157 pressure=0.000000 action_button=000001 buttons=000000
VERBOSE: [Audio] Buffering: target=2400 avg=15162.800781 cur=12464 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15355.427734 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15394.809570 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15385.144531 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15405.926757 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15405.133789 cur=17264 compensation=-3840
VERBOSE: [Audio] Buffering: target=2400 avg=15404.973632 cur=17264 compensation=-3840
DEBUG: User requested to quit
DEBUG: quit...
DEBUG: Demuxer 'audio': end of frames
DEBUG: Receiver stopped
DEB[server] DEBUG: Controller stopped
UG: Demuxer 'video': end of frames
WARN: Killing the server...
DEBUG: Server disconnected
DEBUG: Server terminated

@rom1v
Copy link
Collaborator

rom1v commented Jun 4, 2023

VERBOSE: [Audio] Buffering: target=2400 avg=17100.707031 cur=21120 compensation=-3840

That is not normal.

Maybe it's because my PC is old and can't handle too low buffer size?

I think it's a software or driver issue at this point.

I built a release from dev branch with more audio player debug logs:

diff
diff --git a/app/src/audio_player.c b/app/src/audio_player.c
index 8f0ad7fba..2942de170 100644
--- a/app/src/audio_player.c
+++ b/app/src/audio_player.c
@@ -5,7 +5,7 @@
 
 #include "util/log.h"
 
-#define SC_AUDIO_PLAYER_NDEBUG // comment to debug
+//#define SC_AUDIO_PLAYER_NDEBUG // comment to debug
 
 /**
  * Real-time audio player with configurable latency

Please try:

For example with 20ms output buffer:

scrcpy --audio-output-buffer=20 --audio-buffer=100

@chikinrais
Copy link
Author

chikinrais commented Jun 4, 2023

Please try:

I don't know why, but when I try to download this file, I get "403 Forbidden", can you please share this zip file in another way?

@rom1v
Copy link
Collaborator

rom1v commented Jun 4, 2023

Oops, wrong link. Fixed.

@chikinrais
Copy link
Author

chikinrais commented Jun 4, 2023

Thank you for the kit.
I first tried "scrcpy --audio-output-buffer=20 --audio-buffer=100", and although the pitch problem at the beginning was still there, the music sounded fine without frequent delays.
But when I added -Vverbose and tried again, the delays became ridiculously frequent, and the music sounded like it was cut up into many tiny sections.
It's a lot like when you open a video on youtube and hold down the space bar while it's playing, it sounds like this.
Here is the log.

D:\scrcpy-win64-v2.0-80-g2d79aeb11>scrcpy --audio-output-buffer=20 --audio-buffer=100 -Vverbose
scrcpy 2.0 <https://github.com/Genymobile/scrcpy>
DEBUG: ADB device found:
DEBUG:     -->   (usb)              4ef8d907            device  LE2100
DEBUG: Device serial: 4ef8d907
DEBUG: Using server (portable): D:\scrcpy-win64-v2.0-80-g2d79aeb11\scrcpy-server
D:\scrcpy-win64-v2.0-80-g2d79aeb11\scrcpy-server: 1 file pushed, 0 skipped. 41.3 MB/s (57795 bytes in 0.001s)
[server] INFO: Device: OnePlus LE2100 (Android 11)
[server] DEBUG: Using video encoder: 'OMX.qcom.video.encoder.avc'
[server] DEBUG: Using audio encoder: 'c2.android.opus.encoder'
DEBUG: Server connected
DEBUG: Starting controller thread
DEBUG: Starting receiver thread
INFO: Renderer: direct3d
DEBUG: Trilinear filtering disabled (not an OpenGL renderer
DEBUG: Using icon (portable): D:\scrcpy-win64-v2.0-80-g2d79aeb11\icon.png
DEBUG: Demuxer 'video': starting thread
DEBUG: Demuxer 'audio': starting thread
INFO: Texture: 1080x2400
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
VERBOSE: [Audio] Inserting initial buffering silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] Playback not started, skipping 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] Playback not started, skipping 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] Playback not started, skipping 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] Playback not started, skipping 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] Playback not started, skipping 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] Playback not started, skipping 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] Playback not started, skipping 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] Playback not started, skipping 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] Playback not started, skipping 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] Playback not started, skipping 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] Playback not started, skipping 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] Playback not started, skipping 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] Playback not started, skipping 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] buffered_samples=4800 avg_buffering=4800.000000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] buffered_samples=2880 avg_buffering=3840.000000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=2880.000000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=3840.000000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=5568.000000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=8800.000000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=10971.428710
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=11400.000000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=11093.333007
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=11808.000000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=14312.727539
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=15840.000000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=17353.845703
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=17965.714843
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=19520.000000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=21060.000000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=20781.175781
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=21493.333984
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=21322.105468
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=21216.000000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=23908.572265
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=24698.181640
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=26420.869140
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=27200.000000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=29836.800781
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=36110.769531
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=40355.554687
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=40800.000000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=40353.101562
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=41824.000000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=41434.839843
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=41100.000000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=40775.625000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=44181.386718
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=43760.718750
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=43353.195312
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=48538.406249
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=49841.582031
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=51104.031250
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=52327.031250
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=54441.812499
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=59280.507812
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=59317.992187
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=59354.304687
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=58459.484374
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=59452.625000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=62274.730468
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=65938.648437
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=64838.066406
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=69351.874999
DEBUG: [Audio] SDL callback requests 960 samples
VERBOSE: [Audio] Buffering: target=4800 avg=69351.874999 cur=960 compensation=0
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=78374.625000
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=79675.421874
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=83725.562500
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=83929.140624
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=82266.351562
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=81585.531250
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=81855.984374
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=82117.984374
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=82371.796875
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
VERBOSE: input: touch [id=finger] down position=531,2292 pressure=1.000000 action_button=000001 buttons=000001
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=83547.679687
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
VERBOSE: input: touch [id=finger]   up position=531,2292 pressure=0.000000 action_button=000001 buttons=000000
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=82826.812499
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=83988.476562
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=87903.835937
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=87976.843749
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=86187.570312
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=84454.210937
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=83705.015624
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=82049.234374
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] buffered_samples=960 avg_buffering=80445.195312
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] 960 samples written to buffer
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: User requested to quit
DEBUG: quit...
DEBUG: [Audio] SDL callback requests 960[server] DEBUG: Controller stopped
 s[server] DEBUG: Device message sender stopped
amples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: Receiver stopped
DEBUG: [Audio] buffered_samples=960 avg_buffering=80751.281249
DEBU[server] DEBUG: Screen streaming stopped
G: Demuxer 'audio': end of frames
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting silence: 960 samples
DEBUG: [Audio] SDL callback requests 960 samples
DEBUG: [Audio] Buffer underflow, inserting sil[server] DEBUG: Audio encoder stopped
ence: 960 samples
DEBUG: Demuxer 'video': end of frames
DEBUG: Server disconnected
DEBUG: Server terminated

@chikinrais
Copy link
Author

chikinrais commented Jun 4, 2023

Follow up:
I used this kit with scrcpy --audio-output-buffer=20 --audio-buffer=100, and kept listening for a while

Except for the first 5 seconds, the music sounded basically normal, without any problems.
The latency is very close to the sndcpy I mentioned before, even a little shorter?
Also the latency did not increase due to usage time (at least not in the last 5 minutes).

Follow-up again:
With the settings above, I have been playing music continuously for over 30 minutes, without any new problems so far.

@rom1v
Copy link
Collaborator

rom1v commented Jun 5, 2023

Oh, there is indeed a difference between the rate at which samples are produced and consumed, but in your last logs, the culprit seems to be the producer (i.e. the device, it produces 960 samples when the consumer consumed 4×960 samples).

(Btw, is it over USB or wifi?)

I don't understand how recording could be perfect with that problem though.

Before adding more logs, could you test without video and without audio encoding:

scrcpy --audio-output-buffer=20 --audio-buffer=100 --no-video --audio-codec=raw

(and without your equalizer, whatever it is)

@chikinrais
Copy link
Author

scrcpy --audio-output-buffer=20 --audio-buffer=100 --no-video --audio-codec=raw

I just tried this, using the kit you provided, and the situation is basically the same as " #4055 (comment) ".
All my attempts so far have used USB connection and turned off EQ on the phone.

@rom1v
Copy link
Collaborator

rom1v commented Jun 5, 2023

OK, so let's add a log on the server side:

diff
diff --git a/server/src/main/java/com/genymobile/scrcpy/AudioCapture.java b/server/src/main/java/com/genymobile/scrcpy/AudioCapture.java
index 7b20cce4f..46eeb1b27 100644
--- a/server/src/main/java/com/genymobile/scrcpy/AudioCapture.java
+++ b/server/src/main/java/com/genymobile/scrcpy/AudioCapture.java
@@ -167,6 +167,8 @@ public final class AudioCapture {
         }
         previousPts = pts;
 
+        Ln.i("=== [" + (System.nanoTime() / 1000) + "] pts=" + pts + ", " + (r / (CHANNELS * BYTES_PER_SAMPLE)) + " samples");
+
         outBufferInfo.set(0, r, pts, 0);
         return r;
     }

Here is a server binary (to be replaced in the release provided in #4055 (comment)):

  • scrcpy-server SHA-256: c5fe22460387e1dc8d51488ed3b794b2ffb51ab2838b224ac419ec7c8c7c335a

@chikinrais
Copy link
Author

chikinrais commented Jun 5, 2023

OK, so let's add a log on the server side:

diff
Here is a server binary (to be replaced in the release provided in #4055 (comment)):

  • scrcpy-server SHA-256: c5fe22460387e1dc8d51488ed3b794b2ffb51ab2838b224ac419ec7c8c7c335a

I copied the file you provided and overwrote it, and tried this code again.

scrcpy --audio-output-buffer=20 --audio-buffer=100 --no-video --audio-codec=raw

Then the logs started to grow rapidly, like below.
But the sound I hear is still no different from " #4055 (comment) ".

D:\scrcpy-win64-v2.0-80-g2d79aeb11>scrcpy --audio-output-buffer=20 --audio-buffer=100 --no-video --audio-codec=raw
scrcpy 2.0 <https://github.com/Genymobile/scrcpy>
D:\scrcpy-win64-v2.0-80-g2d79aeb11\scrcpy-server: 1 file pushed, 0 skipped. 56.8 MB/s (140859 bytes in 0.002s)
[server] INFO: Device: OnePlus LE2100 (Android 11)
[server] INFO: === [108881673211] pts=108881655831, 240 samples
[server] INFO: === [108881673474] pts=108881655831, 240 samples
[server] INFO: === [108881673579] pts=108881655831, 240 samples
[server] INFO: === [108881673682] pts=108881655831, 240 samples
[server] INFO: === [108881677467] pts=108881677348, 240 samples
[server] INFO: === [108881677648] pts=108881677348, 240 samples
[server] INFO: === [108881677720] pts=108881677348, 240 samples
[server] INFO: === [108881677784] pts=108881677348, 240 samples
[server] INFO: === [108881698918] pts=108881698732, 240 samples
[server] INFO: === [108881699332] pts=108881698732, 240 samples
[server] INFO: === [108881699546] pts=108881698732, 240 samples
[server] INFO: === [108881699737] pts=108881698732, 240 samples
[server] INFO: === [108881720223] pts=108881720045, 240 samples
[server] INFO: === [108881720452] pts=108881720045, 240 samples
[server] INFO: === [108881720514] pts=108881720045, 240 samples
[server] INFO: === [108881720578] pts=108881720045, 240 samples
[server] INFO: === [108881720637] pts=108881720045, 240 samples
[server] INFO: === [108881743939] pts=108881743537, 240 samples
[server] INFO: === [108881744617] pts=108881743537, 240 samples
[server] INFO: === [108881744695] pts=108881743537, 240 samples
[server] INFO: === [108881744822] pts=108881743537, 240 samples
[server] INFO: === [108881762830] pts=108881762690, 240 samples
[server] INFO: === [108881763056] pts=108881762690, 240 samples
[server] INFO: === [108881763135] pts=108881762690, 240 samples
[server] INFO: === [108881763226] pts=108881762690, 240 samples
[server] INFO: === [108881784296] pts=108881784116, 240 samples
[server] INFO: === [108881784553] pts=108881784116, 240 samples
[server] INFO: === [108881784655] pts=108881784116, 240 samples
[server] INFO: === [108881784763] pts=108881784116, 240 samples
[server] INFO: === [108881805481] pts=108881805353, 240 samples
[server] INFO: === [108881806479] pts=108881805353, 240 samples
[server] INFO: === [108881806857] pts=108881805353, 240 samples
[server] INFO: === [108881806997] pts=108881805353, 240 samples
[server] INFO: === [108881807101] pts=108881805353, 240 samples
[server] INFO: === [108881826815] pts=108881826677, 240 samples
[server] INFO: === [108881827033] pts=108881826677, 240 samples
[server] INFO: === [108881827099] pts=108881826677, 240 samples
[server] INFO: === [108881827163] pts=108881826677, 240 samples
[server] INFO: === [108881848151] pts=108881847994, 240 samples
[server] INFO: === [108881848419] pts=108881847994, 240 samples
[server] INFO: === [108881848519] pts=108881847994, 240 samples
[server] INFO: === [108881848615] pts=108881847994, 240 samples
[server] INFO: === [108881869414] pts=108881869323, 240 samples
[server] INFO: === [108881869639] pts=108881869323, 240 samples
[server] INFO: === [108881869739] pts=108881869323, 240 samples
[server] INFO: === [108881869840] pts=108881869323, 240 samples
[server] INFO: === [108881890770] pts=108881890662, 240 samples
[server] INFO: === [108881891050] pts=108881890662, 240 samples
[server] INFO: === [108881891161] pts=108881890662, 240 samples
[server] INFO: === [108881891255] pts=108881890662, 240 samples
[server] INFO: === [108881891343] pts=108881890662, 240 samples
[server] INFO: === [108881912082] pts=108881911990, 240 samples
[server] INFO: === [108881912225] pts=108881911990, 240 samples
[server] INFO: === [108881912289] pts=108881911990, 240 samples
[server] INFO: === [108881912349] pts=108881911990, 240 samples
[server] INFO: === [108881933445] pts=108881933330, 240 samples
[server] INFO: === [108881933620] pts=108881933330, 240 samples
[server] INFO: === [108881933686] pts=108881933330, 240 samples
[server] INFO: === [108881933746] pts=108881933330, 240 samples
[server] INFO: === [108881954748] pts=108881954655, 240 samples
[server] INFO: === [108881954930] pts=108881954655, 240 samples
[server] INFO: === [108881954999] pts=108881954655, 240 samples
[server] INFO: === [108881955057] pts=108881954655, 240 samples
[server] INFO: === [108881955122] pts=108881954655, 240 samples
[server] INFO: === [108881976146] pts=108881975992, 240 samples
[server] INFO: === [108881976374] pts=108881975992, 240 samples
[server] INFO: === [108881976483] pts=108881975992, 240 samples
[server] INFO: === [108881976569] pts=108881975992, 240 samples
[server] INFO: === [108881997429] pts=108881997325, 240 samples
[server] INFO: === [108881997652] pts=108881997325, 240 samples
[server] INFO: === [108881997747] pts=108881997325, 240 samples
[server] INFO: === [108881997845] pts=108881997325, 240 samples
[server] INFO: === [108882018733] pts=108882018651, 240 samples
[server] INFO: === [108882018926] pts=108882018651, 240 samples
[server] INFO: === [108882019017] pts=108882018651, 240 samples
[server] INFO: === [108882019109] pts=108882018651, 240 samples
[server] INFO: === [108882040119] pts=108882040000, 240 samples
[server] INFO: === [108882040325] pts=108882040000, 240 samples
[server] INFO: === [108882040419] pts=108882040000, 240 samples
[server] INFO: === [108882040504] pts=108882040000, 240 samples
[server] INFO: === [108882040607] pts=108882040000, 240 samples
[server] INFO: === [108882061419] pts=108882061328, 240 samples
[server] INFO: === [108882061653] pts=108882061328, 240 samples
[server] INFO: === [108882061802] pts=108882061328, 240 samples
[server] INFO: === [108882061917] pts=108882061328, 240 samples
[server] INFO: === [108882082749] pts=108882082660, 240 samples
[server] INFO: === [108882082975] pts=108882082660, 240 samples
[server] INFO: === [108882083092] pts=108882082660, 240 samples
[server] INFO: === [108882083203] pts=108882082660, 240 samples
[server] INFO: === [108882104154] pts=108882103995, 240 samples
[server] INFO: === [108882104338] pts=108882103995, 240 samples
[server] INFO: === [108882104404] pts=108882103995, 240 samples
[server] INFO: === [108882104482] pts=108882103995, 240 samples
[server] INFO: === [108882125422] pts=108882125328, 240 samples
[server] INFO: === [108882125616] pts=108882125328, 240 samples
[server] INFO: === [108882125690] pts=108882125328, 240 samples
[server] INFO: === [108882125761] pts=108882125328, 240 samples
[server] INFO: === [108882125838] pts=108882125328, 240 samples
[server] INFO: === [108882146715] pts=108882146654, 240 samples
[server] INFO: === [108882146887] pts=108882146654, 240 samples
[server] INFO: === [108882146960] pts=108882146654, 240 samples
[server] INFO: === [108882147025] pts=108882146654, 240 samples
[server] INFO: === [108882168070] pts=108882167988, 240 samples
[server] INFO: === [108882168300] pts=108882167988, 240 samples
[server] INFO: === [108882168407] pts=108882167988, 240 samples
[server] INFO: === [108882168520] pts=108882167988, 240 samples
[server] INFO: === [108882189401] pts=108882189331, 240 samples
[server] INFO: === [108882189636] pts=108882189331, 240 samples
[server] INFO: === [108882189743] pts=108882189331, 240 samples
[server] INFO: === [108882189843] pts=108882189331, 240 samples
[server] INFO: === [108882210729] pts=108882210662, 240 samples
[server] INFO: === [108882210951] pts=108882210662, 240 samples
[server] INFO: === [108882211059] pts=108882210662, 240 samples
[server] INFO: === [108882211159] pts=108882210662, 240 samples
[server] INFO: === [108882211267] pts=108882210662, 240 samples
[server] INFO: === [108882232099] pts=108882231993, 240 samples
[server] INFO: === [108882232301] pts=108882231993, 240 samples
[server] INFO: === [108882232376] pts=108882231993, 240 samples
[server] INFO: === [108882232478] pts=108882231993, 240 samples
[server] INFO: === [108882253376] pts=108882253306, 240 samples
[server] INFO: === [108882253603] pts=108882253306, 240 samples
[server] INFO: === [108882253683] pts=108882253306, 240 samples
[server] INFO: === [108882253750] pts=108882253306, 240 samples
[server] INFO: === [108882274722] pts=108882274656, 240 samples
[server] INFO: === [108882274931] pts=108882274656, 240 samples
[server] INFO: === [108882275014] pts=108882274656, 240 samples
[server] INFO: === [108882275089] pts=108882274656, 240 samples
[server] INFO: === [108882275164] pts=108882274656, 240 samples
[server] INFO: === [108882296082] pts=108882295990, 240 samples
[server] INFO: === [108882296252] pts=108882295990, 240 samples
[server] INFO: === [108882296332] pts=108882295990, 240 samples
[server] INFO: === [108882296423] pts=108882295990, 240 samples
[server] INFO: === [108882317380] pts=108882317323, 240 samples
[server] INFO: === [108882317555] pts=108882317323, 240 samples
[server] INFO: === [108882317629] pts=108882317323, 240 samples
[server] INFO: === [108882317704] pts=108882317323, 240 samples
[server] INFO: === [108882338730] pts=108882338661, 240 samples
[server] INFO: === [108882338927] pts=108882338661, 240 samples
[server] INFO: === [108882339015] pts=108882338661, 240 samples
[server] INFO: === [108882339085] pts=108882338661, 240 samples
[server] INFO: === [108882360077] pts=108882359989, 240 samples
[server] INFO: === [108882360231] pts=108882359989, 240 samples
[server] INFO: === [108882360310] pts=108882359989, 240 samples
[server] INFO: === [108882360373] pts=108882359989, 240 samples
[server] INFO: === [108882360442] pts=108882359989, 240 samples
[server] INFO: === [108882381383] pts=108882381322, 240 samples
[server] INFO: === [108882381535] pts=108882381322, 240 samples
[server] INFO: === [108882381619] pts=108882381322, 240 samples
[server] INFO: === [108882381694] pts=108882381322, 240 samples
[server] INFO: === [108882402712] pts=108882402656, 240 samples
[server] INFO: === [108882402866] pts=108882402656, 240 samples
[server] INFO: === [108882402940] pts=108882402656, 240 samples
[server] INFO: === [108882403010] pts=108882402656, 240 samples
[server] INFO: === [108882424103] pts=108882423991, 240 samples
[server] INFO: === [108882424291] pts=108882423991, 240 samples
[server] INFO: === [108882424397] pts=108882423991, 240 samples
[server] INFO: === [108882424484] pts=108882423991, 240 samples
[server] INFO: === [108882445398] pts=108882445329, 240 samples
[server] INFO: === [108882445580] pts=108882445329, 240 samples
[server] INFO: === [108882445652] pts=108882445329, 240 samples
[server] INFO: === [108882445724] pts=108882445329, 240 samples
[server] INFO: === [108882445792] pts=108882445329, 240 samples
[server] INFO: === [108882466726] pts=108882466660, 240 samples
[server] INFO: === [108882466900] pts=108882466660, 240 samples
[server] INFO: === [108882466982] pts=108882466660, 240 samples
[server] INFO: === [108882467059] pts=108882466660, 240 samples
[server] INFO: === [108882488113] pts=108882488000, 240 samples
[server] INFO: === [108882488366] pts=108882488000, 240 samples
[server] INFO: === [108882488437] pts=108882488000, 240 samples
[server] INFO: === [108882488501] pts=108882488000, 240 samples
[server] INFO: === [108882509384] pts=108882509327, 240 samples
[server] INFO: === [108882509551] pts=108882509327, 240 samples
[server] INFO: === [108882509629] pts=108882509327, 240 samples
[server] INFO: === [108882509698] pts=108882509327, 240 samples
[server] INFO: === [108882530716] pts=108882530658, 240 samples
[server] INFO: === [108882530894] pts=108882530658, 240 samples
[server] INFO: === [108882530976] pts=108882530658, 240 samples
[server] INFO: === [108882531043] pts=108882530658, 240 samples
[server] INFO: === [108882531105] pts=108882530658, 240 samples
[server] INFO: === [108882552057] pts=108882551993, 240 samples
[server] INFO: === [108882552206] pts=108882551993, 240 samples
[server] INFO: === [108882552294] pts=108882551993, 240 samples
[server] INFO: === [108882552393] pts=108882551993, 240 samples
[server] INFO: === [108882573400] pts=108882573327, 240 samples
[server] INFO: === [108882573582] pts=108882573327, 240 samples
[server] INFO: === [108882573666] pts=108882573327, 240 samples
[server] INFO: === [108882573728] pts=108882573327, 240 samples
[server] INFO: === [108882594720] pts=108882594660, 240 samples
[server] INFO: === [108882594888] pts=108882594660, 240 samples
[server] INFO: === [108882594966] pts=108882594660, 240 samples
[server] INFO: === [108882595029] pts=108882594660, 240 samples
[server] INFO: === [108882595090] pts=108882594660, 240 samples
[server] INFO: === [108882616055] pts=108882615993, 240 samples
[server] INFO: === [108882616230] pts=108882615993, 240 samples
[server] INFO: === [108882616298] pts=108882615993, 240 samples
[server] INFO: === [108882616363] pts=108882615993, 240 samples
[server] INFO: === [108882637403] pts=108882637330, 240 samples
[server] INFO: === [108882637594] pts=108882637330, 240 samples
[server] INFO: === [108882637663] pts=108882637330, 240 samples
[server] INFO: === [108882637728] pts=108882637330, 240 samples
[server] INFO: === [108882658712] pts=108882658656, 240 samples
[server] INFO: === [108882658848] pts=108882658656, 240 samples
[server] INFO: === [108882658916] pts=108882658656, 240 samples
[server] INFO: === [108882658982] pts=108882658656, 240 samples
[server] INFO: === [108882680080] pts=108882679989, 240 samples
[server] INFO: === [108882680235] pts=108882679989, 240 samples
[server] INFO: === [108882680321] pts=108882679989, 240 samples
[server] INFO: === [108882680408] pts=108882679989, 240 samples
[server] INFO: === [108882680471] pts=108882679989, 240 samples
[server] INFO: === [108882701391] pts=108882701327, 240 samples
[server] INFO: === [108882701573] pts=108882701327, 240 samples
[server] INFO: === [108882701639] pts=108882701327, 240 samples
[server] INFO: === [108882701709] pts=108882701327, 240 samples
[server] INFO: === [108882722721] pts=108882722653, 240 samples
[server] INFO: === [108882722965] pts=108882722653, 240 samples
[server] INFO: === [108882723141] pts=108882722653, 240 samples
[server] INFO: === [108882723201] pts=108882722653, 240 samples
[server] INFO: === [108882744094] pts=108882743994, 240 samples
[server] INFO: === [108882744303] pts=108882743994, 240 samples
[server] INFO: === [108882744377] pts=108882743994, 240 samples
[server] INFO: === [108882744449] pts=108882743994, 240 samples
[server] INFO: === [108882765384] pts=108882765322, 240 samples
[server] INFO: === [108882765608] pts=108882765322, 240 samples
[server] INFO: === [108882765730] pts=108882765322, 240 samples
[server] INFO: === [108882765826] pts=108882765322, 240 samples
[server] INFO: === [108882765921] pts=108882765322, 240 samples
[server] INFO: === [108882786774] pts=108882786680, 240 samples
[server] INFO: === [108882786994] pts=108882786680, 240 samples
[server] INFO: === [108882787065] pts=108882786680, 240 samples
[server] INFO: === [108882787130] pts=108882786680, 240 samples
[server] INFO: === [108882808060] pts=108882807992, 240 samples
[server] INFO: === [108882808227] pts=108882807992, 240 samples
[server] INFO: === [108882808317] pts=108882807992, 240 samples
[server] INFO: === [108882808386] pts=108882807992, 240 samples
[server] INFO: === [108882829385] pts=108882829322, 240 samples
[server] INFO: === [108882829570] pts=108882829322, 240 samples
[server] INFO: === [108882829654] pts=108882829322, 240 samples
[server] INFO: === [108882829736] pts=108882829322, 240 samples
[server] INFO: === [108882850710] pts=108882850652, 240 samples
[server] INFO: === [108882850896] pts=108882850652, 240 samples
[server] INFO: === [108882850969] pts=108882850652, 240 samples
[server] INFO: === [108882851037] pts=108882850652, 240 samples
[server] INFO: === [108882851114] pts=108882850652, 240 samples
[server] INFO: === [108882872108] pts=108882871987, 240 samples
[server] INFO: === [108882872296] pts=108882871987, 240 samples
[server] INFO: === [108882872397] pts=108882871987, 240 samples
[server] INFO: === [108882872467] pts=108882871987, 240 samples
[server] INFO: === [108882893392] pts=108882893307, 240 samples
[server] INFO: === [108882893563] pts=108882893307, 240 samples
[server] INFO: === [108882893635] pts=108882893307, 240 samples
[server] INFO: === [108882893706] pts=108882893307, 240 samples
[server] INFO: === [108882914711] pts=108882914655, 240 samples
[server] INFO: === [108882914862] pts=108882914655, 240 samples
[server] INFO: === [108882914929] pts=108882914655, 240 samples
[server] INFO: === [108882914993] pts=108882914655, 240 samples
[server] INFO: === [108882915052] pts=108882914655, 240 samples
[server] INFO: === [108882936130] pts=108882936031, 240 samples
[server] INFO: === [108882936420] pts=108882936031, 240 samples
[server] INFO: === [108882936501] pts=108882936031, 240 samples
[server] INFO: === [108882936566] pts=108882936031, 240 samples
[server] INFO: === [108882957449] pts=108882957330, 240 samples
[server] INFO: === [108882957656] pts=108882957330, 240 samples
[server] INFO: === [108882957724] pts=108882957330, 240 samples
[server] INFO: === [108882957787] pts=108882957330, 240 samples
[server] INFO: === [108882978729] pts=108882978659, 240 samples
[server] INFO: === [108882978916] pts=108882978659, 240 samples
[server] INFO: === [108882978981] pts=108882978659, 240 samples
[server] INFO: === [108882979054] pts=108882978659, 240 samples
[server] INFO: === [108883000153] pts=108882999997, 240 samples
[server] INFO: === [108883000346] pts=108882999997, 240 samples
[server] INFO: === [108883000412] pts=108882999997, 240 samples
[server] INFO: === [108883000471] pts=108882999997, 240 samples
[server] INFO: === [108883000538] pts=108882999997, 240 samples
[server] INFO: === [108883021399] pts=108883021328, 240 samples
[server] INFO: === [108883021592] pts=108883021328, 240 samples
[server] INFO: === [108883021660] pts=108883021328, 240 samples
[server] INFO: === [108883021720] pts=108883021328, 240 samples
[server] INFO: === [108883042720] pts=108883042661, 240 samples
[server] INFO: === [108883042876] pts=108883042661, 240 samples
[server] INFO: === [108883042943] pts=108883042661, 240 samples
[server] INFO: === [108883043005] pts=108883042661, 240 samples
[server] INFO: === [108883064068] pts=108883063992, 240 samples
[server] INFO: === [108883064228] pts=108883063992, 240 samples
[server] INFO: === [108883064298] pts=108883063992, 240 samples
[server] INFO: === [108883064363] pts=108883063992, 240 samples
[server] INFO: === [108883085400] pts=108883085333, 240 samples
[server] INFO: === [108883085590] pts=108883085333, 240 samples
[server] INFO: === [108883085659] pts=108883085333, 240 samples
[server] INFO: === [108883085725] pts=108883085333, 240 samples
[server] INFO: === [108883085785] pts=108883085333, 240 samples
[server] INFO: === [108883106712] pts=108883106657, 240 samples
[server] INFO: === [108883106850] pts=108883106657, 240 samples
[server] INFO: === [108883106917] pts=108883106657, 240 samples
[server] INFO: === [108883106981] pts=108883106657, 240 samples
[server] INFO: === [108883128125] pts=108883127987, 240 samples
[server] INFO: === [108883128302] pts=108883127987, 240 samples
[server] INFO: === [108883128371] pts=108883127987, 240 samples
[server] INFO: === [108883128429] pts=108883127987, 240 samples
[server] INFO: === [108883149370] pts=108883149319, 240 samples
[server] INFO: === [108883149510] pts=108883149319, 240 samples
[server] INFO: === [108883149571] pts=108883149319, 240 samples
[server] INFO: === [108883149632] pts=108883149319, 240 samples
[server] INFO: === [108883170729] pts=108883170659, 240 samples
[server] INFO: === [108883170907] pts=108883170659, 240 samples
[server] INFO: === [108883170975] pts=108883170659, 240 samples
[server] INFO: === [108883171039] pts=108883170659, 240 samples
[server] INFO: === [108883171099] pts=108883170659, 240 samples
[server] INFO: === [108883192081] pts=108883191991, 240 samples
[server] INFO: === [108883192227] pts=108883191991, 240 samples
[server] INFO: === [108883192296] pts=108883191991, 240 samples
[server] INFO: === [108883192355] pts=108883191991, 240 samples
[server] INFO: === [108883213400] pts=108883213318, 240 samples
[server] INFO: === [108883213590] pts=108883213318, 240 samples
[server] INFO: === [108883213657] pts=108883213318, 240 samples
[server] INFO: === [108883213716] pts=108883213318, 240 samples
[server] INFO: === [108883234734] pts=108883234663, 240 samples
[server] INFO: === [108883234937] pts=108883234663, 240 samples
[server] INFO: === [108883235003] pts=108883234663, 240 samples
[server] INFO: === [108883235071] pts=108883234663, 240 samples
[server] INFO: === [108883235131] pts=108883234663, 240 samples
[server] INFO: === [108883256065] pts=108883255991, 240 samples
[server] INFO: === [108883256215] pts=108883255991, 240 samples
[server] INFO: === [108883256284] pts=108883255991, 240 samples
[server] INFO: === [108883256361] pts=108883255991, 240 samples
[server] INFO: === [108883277389] pts=108883277320, 240 samples
[server] INFO: === [108883277567] pts=108883277320, 240 samples
[server] INFO: === [108883277637] pts=108883277320, 240 samples
[server] INFO: === [108883277703] pts=108883277320, 240 samples
[server] INFO: === [108883298727] pts=108883298661, 240 samples
[server] INFO: === [108883298903] pts=108883298661, 240 samples
[server] INFO: === [108883298974] pts=108883298661, 240 samples
[server] INFO: === [108883299039] pts=108883298661, 240 samples
[server] INFO: === [108883320058] pts=108883319988, 240 samples
[server] INFO: === [108883320244] pts=108883319988, 240 samples
[server] INFO: === [108883320315] pts=108883319988, 240 samples
[server] INFO: === [108883320380] pts=108883319988, 240 samples
[server] INFO: === [108883320443] pts=108883319988, 240 samples
[server] INFO: === [108883341398] pts=108883341328, 240 samples
[server] INFO: === [108883341563] pts=108883341328, 240 samples
[server] INFO: === [108883341633] pts=108883341328, 240 samples
[server] INFO: === [108883341713] pts=108883341328, 240 samples
[server] INFO: === [108883362719] pts=108883362658, 240 samples
[server] INFO: === [108883362870] pts=108883362658, 240 samples
[server] INFO: === [108883362936] pts=108883362658, 240 samples
[server] INFO: === [108883362998] pts=108883362658, 240 samples
[server] INFO: === [108883384096] pts=108883383997, 240 samples
[server] INFO: === [108883384339] pts=108883383997, 240 samples
[server] INFO: === [108883384418] pts=108883383997, 240 samples
[server] INFO: === [108883384496] pts=108883383997, 240 samples
[server] INFO: === [108883405399] pts=108883405328, 240 samples
[server] INFO: === [108883405599] pts=108883405328, 240 samples
[server] INFO: === [108883405661] pts=108883405328, 240 samples
[server] INFO: === [108883405726] pts=108883405328, 240 samples
[server] INFO: === [108883405790] pts=108883405328, 240 samples
[server] INFO: === [108883426723] pts=108883426661, 240 samples
[server] INFO: === [108883426897] pts=108883426661, 240 samples
[server] INFO: === [108883426965] pts=108883426661, 240 samples
[server] INFO: === [108883427040] pts=108883426661, 240 samples
[server] INFO: === [108883449133] pts=108883448211, 240 samples
[server] INFO: === [108883450500] pts=108883448211, 240 samples
[server] INFO: === [108883451590] pts=108883448211, 240 samples
[server] INFO: === [108883452237] pts=108883448211, 240 samples
[server] INFO: === [108883472643] pts=108883469509, 240 samples
[server] INFO: === [108883474413] pts=108883469509, 240 samples
[server] INFO: === [108883475027] pts=108883469509, 240 samples
[server] INFO: === [108883475485] pts=108883469509, 240 samples
[server] INFO: === [108883490914] pts=108883490745, 240 samples
[server] INFO: === [108883491197] pts=108883490745, 240 samples
[server] INFO: === [108883491427] pts=108883490745, 240 samples
[server] INFO: === [108883491598] pts=108883490745, 240 samples
[server] INFO: === [108883491769] pts=108883490745, 240 samples
[server] INFO: === [108883512316] pts=108883512117, 240 samples
[server] INFO: === [108883512726] pts=108883512117, 240 samples
[server] INFO: === [108883512873] pts=108883512117, 240 samples
[server] INFO: === [108883513027] pts=108883512117, 240 samples
[server] INFO: === [108883533827] pts=108883533509, 240 samples
[server] INFO: === [108883534900] pts=108883533509, 240 samples
[server] INFO: === [108883535183] pts=108883533509, 240 samples
[server] INFO: === [108883535425] pts=108883533509, 240 samples
[server] INFO: === [108883555167] pts=108883554750, 240 samples
[server] INFO: === [108883555605] pts=108883554750, 240 samples
[server] INFO: === [108883555820] pts=108883554750, 240 samples
[server] INFO: === [108883556069] pts=108883554750, 240 samples
[server] INFO: === [108883556216] pts=108883554750, 240 samples
[server] INFO: === [108883577094] pts=108883576680, 240 samples
[server] INFO: === [108883577691] pts=108883576680, 240 samples
[server] INFO: === [108883578015] pts=108883576680, 240 samples
[server] INFO: === [108883578330] pts=108883576680, 240 samples
[server] INFO: === [108883597916] pts=108883597483, 240 samples
[server] INFO: === [108883598596] pts=108883597483, 240 samples
[server] INFO: === [108883603153] pts=108883597483, 240 samples
[server] INFO: === [108883603653] pts=108883597483, 240 samples
[server] INFO: === [108883619342] pts=108883618902, 240 samples
[server] INFO: === [108883620097] pts=108883618902, 240 samples
[server] INFO: === [108883620459] pts=108883618902, 240 samples
[server] INFO: === [108883620742] pts=108883618902, 240 samples
[server] INFO: === [108883641699] pts=108883641340, 240 samples
[server] INFO: === [108883642440] pts=108883641340, 240 samples
[server] INFO: === [108883642745] pts=108883641340, 240 samples
[server] INFO: === [108883643062] pts=108883641340, 240 samples
[server] INFO: === [108883643345] pts=108883641340, 240 samples
[server] INFO: === [108883661970] pts=108883661484, 240 samples
[server] INFO: === [108883662596] pts=108883661484, 240 samples
[server] INFO: === [108883662928] pts=108883661484, 240 samples
[server] INFO: === [108883663252] pts=108883661484, 240 samples
[server] INFO: === [108883683136] pts=108883682898, 240 samples
[server] INFO: === [108883684788] pts=108883682898, 240 samples
[server] INFO: === [108883685270] pts=108883682898, 240 samples
[server] INFO: === [108883685688] pts=108883682898, 240 samples
[server] INFO: === [108883705052] pts=108883704764, 240 samples
[server] INFO: === [108883705482] pts=108883704764, 240 samples
[server] INFO: === [108883705680] pts=108883704764, 240 samples
[server] INFO: === [108883705866] pts=108883704764, 240 samples
[server] INFO: === [108883725817] pts=108883725500, 240 samples
[server] INFO: === [108883726597] pts=108883725500, 240 samples
[server] INFO: === [108883727077] pts=108883725500, 240 samples
[server] INFO: === [108883727677] pts=108883725500, 240 samples
[server] INFO: === [108883728381] pts=108883725500, 240 samples
[server] INFO: === [108883747324] pts=108883746833, 240 samples
[server] INFO: === [108883748192] pts=108883746833, 240 samples
[server] INFO: === [108883750354] pts=108883746833, 240 samples
[server] INFO: === [108883753484] pts=108883746833, 240 samples
[server] INFO: === [108883768866] pts=108883768297, 240 samples
[server] INFO: === [108883769574] pts=108883768297, 240 samples
[server] INFO: === [108883769858] pts=108883768297, 240 samples
[server] INFO: === [108883770091] pts=108883768297, 240 samples
[server] INFO: === [108883789756] pts=108883789435, 240 samples
[server] INFO: === [108883790278] pts=108883789435, 240 samples
[server] INFO: === [108883790492] pts=108883789435, 240 samples
[server] INFO: === [108883790688] pts=108883789435, 240 samples
[server] INFO: === [108883811464] pts=108883810791, 240 samples
[server] INFO: === [108883812114] pts=108883810791, 240 samples
[server] INFO: === [108883812344] pts=108883810791, 240 samples
[server] INFO: === [108883812519] pts=108883810791, 240 samples
[server] INFO: === [108883812697] pts=108883810791, 240 samples
[server] INFO: === [108883832366] pts=108883832093, 240 samples
[server] INFO: === [108883832792] pts=108883832093, 240 samples
[server] INFO: === [108883832932] pts=108883832093, 240 samples
[server] INFO: === [108883833052] pts=108883832093, 240 samples
[server] INFO: === [108883853655] pts=108883853405, 240 samples
[server] INFO: === [108883854735] pts=108883853405, 240 samples
[server] INFO: === [108883854896] pts=108883853405, 240 samples
[server] INFO: === [108883855009] pts=108883853405, 240 samples
[server] INFO: === [108883874980] pts=108883874742, 240 samples
[server] INFO: === [108883875476] pts=108883874742, 240 samples
[server] INFO: === [108883875592] pts=108883874742, 240 samples
[server] INFO: === [108883875829] pts=108883874742, 240 samples
[server] INFO: === [108883876210] pts=108883874742, 240 samples
[server] INFO: === [108883896389] pts=108883896151, 240 samples
[server] INFO: === [108883896835] pts=108883896151, 240 samples
[server] INFO: === [108883897473] pts=108883896151, 240 samples
[server] INFO: === [108883898258] pts=108883896151, 240 samples
[server] INFO: === [108883917946] pts=108883917540, 240 samples
[server] INFO: === [108883918838] pts=108883917540, 240 samples
[server] INFO: === [108883920670] pts=108883917540, 240 samples
[server] INFO: === [108883922855] pts=108883917540, 240 samples
[server] INFO: === [108883939441] pts=108883938917, 240 samples
[server] INFO: === [108883940671] pts=108883938917, 240 samples
[server] INFO: === [108883941474] pts=108883938917, 240 samples
[server] INFO: === [108883941995] pts=108883938917, 240 samples
[server] INFO: === [108883960475] pts=108883960136, 240 samples
[server] INFO: === [108883961293] pts=108883960136, 240 samples
[server] INFO: === [108883961548] pts=108883960136, 240 samples
[server] INFO: === [108883961793] pts=108883960136, 240 samples
[server] INFO: === [108883962022] pts=108883960136, 240 samples
[server] INFO: === [108883982064] pts=108883981782, 240 samples
[server] INFO: === [108883982783] pts=108883981782, 240 samples
[server] INFO: === [108883982957] pts=108883981782, 240 samples
[server] INFO: === [108883983105] pts=108883981782, 240 samples
[server] INFO: === [108884003259] pts=108884003028, 240 samples
[server] INFO: === [108884004148] pts=108884003028, 240 samples
[server] INFO: === [108884004289] pts=108884003028, 240 samples
[server] INFO: === [108884004440] pts=108884003028, 240 samples
[server] INFO: === [108884024320] pts=108884024120, 240 samples
[server] INFO: === [108884024762] pts=108884024120, 240 samples
[server] INFO: === [108884024968] pts=108884024120, 240 samples
[server] INFO: === [108884025376] pts=108884024120, 240 samples
[server] INFO: === [108884046087] pts=108884045540, 240 samples
[server] INFO: === [108884047405] pts=108884045540, 240 samples
[server] INFO: === [108884049256] pts=108884045540, 240 samples
[server] INFO: === [108884049888] pts=108884045540, 240 samples
[server] INFO: === [108884050721] pts=108884045540, 240 samples
[server] INFO: === [108884066978] pts=108884066788, 240 samples
[server] INFO: === [108884067358] pts=108884066788, 240 samples
[server] INFO: === [108884067570] pts=108884066788, 240 samples
[server] INFO: === [108884067790] pts=108884066788, 240 samples
[server] INFO: === [108884088651] pts=108884088278, 240 samples
[server] INFO: === [108884089333] pts=108884088278, 240 samples
[server] INFO: === [108884089703] pts=108884088278, 240 samples
[server] INFO: === [108884090048] pts=108884088278, 240 samples
[server] INFO: === [108884109857] pts=108884109529, 240 samples
[server] INFO: === [108884110524] pts=108884109529, 240 samples
[server] INFO: === [108884110885] pts=108884109529, 240 samples
[server] INFO: === [108884111232] pts=108884109529, 240 samples
[server] INFO: === [108884131558] pts=108884130864, 240 samples
[server] INFO: === [108884132330] pts=108884130864, 240 samples
[server] INFO: === [108884133684] pts=108884130864, 240 samples
[server] INFO: === [108884135292] pts=108884130864, 240 samples
[server] INFO: === [108884136352] pts=108884130864, 240 samples
[server] INFO: === [108884152889] pts=108884152259, 240 samples
[server] INFO: === [108884154620] pts=108884152259, 240 samples
[server] INFO: === [108884155275] pts=108884152259, 240 samples
[server] INFO: === [108884160277] pts=108884152259, 240 samples
[server] INFO: === [108884173745] pts=108884173505, 240 samples
[server] INFO: === [108884174300] pts=108884173505, 240 samples
[server] INFO: === [108884174652] pts=108884173505, 240 samples
[server] INFO: === [108884174988] pts=108884173505, 240 samples
[server] INFO: === [108884195084] pts=108884194819, 240 samples
[server] INFO: === [108884195786] pts=108884194819, 240 samples
[server] INFO: === [108884198096] pts=108884194819, 240 samples
[server] INFO: === [108884199498] pts=108884194819, 240 samples
[server] INFO: === [108884199981] pts=108884194819, 240 samples
[server] INFO: === [108884217631] pts=108884216307, 240 samples
[server] INFO: === [108884218265] pts=108884216307, 240 samples
[server] INFO: === [108884218601] pts=108884216307, 240 samples
[server] INFO: === [108884218917] pts=108884216307, 240 samples
[server] INFO: === [108884237759] pts=108884237489, 240 samples
[server] INFO: === [108884238221] pts=108884237489, 240 samples
[server] INFO: === [108884238487] pts=108884237489, 240 samples
[server] INFO: === [108884239331] pts=108884237489, 240 samples
[server] INFO: === [108884259368] pts=108884258850, 240 samples
[server] INFO: === [108884259912] pts=108884258850, 240 samples
[server] INFO: === [108884260925] pts=108884258850, 240 samples
[server] INFO: === [108884262222] pts=108884258850, 240 samples
[server] INFO: === [108884280397] pts=108884280154, 240 samples
[server] INFO: === [108884281621] pts=108884280154, 240 samples
[server] INFO: === [108884283245] pts=108884280154, 240 samples
[server] INFO: === [108884283469] pts=108884280154, 240 samples
[server] INFO: === [108884283653] pts=108884280154, 240 samples
[server] INFO: === [108884302108] pts=108884301858, 240 samples
[server] INFO: === [108884302914] pts=108884301858, 240 samples
[server] INFO: === [108884303163] pts=108884301858, 240 samples
[server] INFO: === [108884303407] pts=108884301858, 240 samples
[server] INFO: === [108884323289] pts=108884322925, 240 samples
[server] INFO: === [108884324111] pts=108884322925, 240 samples
[server] INFO: === [108884324457] pts=108884322925, 240 samples
[server] INFO: === [108884324883] pts=108884322925, 240 samples
[server] INFO: === [108884344754] pts=108884344236, 240 samples
[server] INFO: === [108884345537] pts=108884344236, 240 samples
[server] INFO: === [108884346047] pts=108884344236, 240 samples
[server] INFO: === [108884346794] pts=108884344236, 240 samples
[server] INFO: === [108884367076] pts=108884365769, 240 samples
[server] INFO: === [108884367762] pts=108884365769, 240 samples
[server] INFO: === [108884368267] pts=108884365769, 240 samples
[server] INFO: === [108884368591] pts=108884365769, 240 samples
[server] INFO: === [108884368898] pts=108884365769, 240 samples
[server] INFO: === [108884387325] pts=108884387020, 240 samples
[server] INFO: === [108884388538] pts=108884387020, 240 samples
[server] INFO: === [108884389022] pts=108884387020, 240 samples
[server] INFO: === [108884389471] pts=108884387020, 240 samples
[server] INFO: === [108884408851] pts=108884408247, 240 samples
[server] INFO: === [108884409385] pts=108884408247, 240 samples
[server] INFO: === [108884409667] pts=108884408247, 240 samples
[server] INFO: === [108884410189] pts=108884408247, 240 samples
[server] INFO: === [108884430030] pts=108884429571, 240 samples
[server] INFO: === [108884430849] pts=108884429571, 240 samples
[server] INFO: === [108884432476] pts=108884429571, 240 samples
[server] INFO: === [108884433058] pts=108884429571, 240 samples
[server] INFO: === [108884451078] pts=108884450846, 240 samples
[server] INFO: === [108884451719] pts=108884450846, 240 samples
[server] INFO: === [108884452133] pts=108884450846, 240 samples
[server] INFO: === [108884452714] pts=108884450846, 240 samples
[server] INFO: === [108884453392] pts=108884450846, 240 samples
[server] INFO: === [108884472584] pts=108884472174, 240 samples
[server] INFO: === [108884473776] pts=108884472174, 240 samples
[server] INFO: === [108884474327] pts=108884472174, 240 samples
[server] INFO: === [108884474824] pts=108884472174, 240 samples
[server] INFO: === [108884494051] pts=108884493458, 240 samples
[server] INFO: === [108884494959] pts=108884493458, 240 samples
[server] INFO: === [108884495382] pts=108884493458, 240 samples
[server] INFO: === [108884496834] pts=108884493458, 240 samples
[server] INFO: === [108884515085] pts=108884514891, 240 samples
[server] INFO: === [108884516341] pts=108884514891, 240 samples
[server] INFO: === [108884516466] pts=108884514891, 240 samples
[server] INFO: === [108884516578] pts=108884514891, 240 samples
[server] INFO: === [108884516722] pts=108884514891, 240 samples
[server] INFO: === [108884536590] pts=108884536159, 240 samples
[server] INFO: === [108884536879] pts=108884536159, 240 samples
[server] INFO: === [108884536977] pts=108884536159, 240 samples
[server] INFO: === [108884537069] pts=108884536159, 240 samples
[server] INFO: === [108884558848] pts=108884557624, 240 samples
[server] INFO: === [108884559573] pts=108884557624, 240 samples
[server] INFO: === [108884559923] pts=108884557624, 240 samples
[server] INFO: === [108884560336] pts=108884557624, 240 samples
[server] INFO: === [108884580075] pts=108884578868, 240 samples
[server] INFO: === [108884580481] pts=108884578868, 240 samples
[server] INFO: === [108884580636] pts=108884578868, 240 samples
[server] INFO: === [108884580780] pts=108884578868, 240 samples
[server] INFO: === [108884600724] pts=108884600448, 240 samples
[server] INFO: === [108884601136] pts=108884600448, 240 samples
[server] INFO: === [108884601323] pts=108884600448, 240 samples
[server] INFO: === [108884601495] pts=108884600448, 240 samples
[server] INFO: === [108884601700] pts=108884600448, 240 samples
[server] INFO: === [108884621992] pts=108884621508, 240 samples
[server] INFO: === [108884622477] pts=108884621508, 240 samples
[server] INFO: === [108884622729] pts=108884621508, 240 samples
[server] INFO: === [108884622966] pts=108884621508, 240 samples
[server] INFO: === [108884643319] pts=108884642841, 240 samples
[server] INFO: === [108884643858] pts=108884642841, 240 samples
[server] INFO: === [108884644214] pts=108884642841, 240 samples
[server] INFO: === [108884644553] pts=108884642841, 240 samples
[server] INFO: === [108884666359] pts=108884664525, 240 samples
[server] INFO: === [108884667088] pts=108884664525, 240 samples
[server] INFO: === [108884667407] pts=108884664525, 240 samples
[server] INFO: === [108884669568] pts=108884664525, 240 samples
[server] INFO: === [108884685975] pts=108884685685, 240 samples
[server] INFO: === [108884686596] pts=108884685685, 240 samples
[server] INFO: === [108884686922] pts=108884685685, 240 samples
[server] INFO: === [108884687153] pts=108884685685, 240 samples
[server] INFO: === [108884687412] pts=108884685685, 240 samples
[server] INFO: === [108884707170] pts=108884706875, 240 samples
[server] INFO: === [108884707730] pts=108884706875, 240 samples
[server] INFO: === [108884708137] pts=108884706875, 240 samples
[server] INFO: === [108884708412] pts=108884706875, 240 samples
[server] INFO: === [108884728265] pts=108884728112, 240 samples
[server] INFO: === [108884730471] pts=108884728112, 240 samples
[server] INFO: === [108884730962] pts=108884728112, 240 samples
[server] INFO: === [108884732528] pts=108884728112, 240 samples
[server] INFO: === [108884749896] pts=108884749478, 240 samples
[server] INFO: === [108884750491] pts=108884749478, 240 samples
[server] INFO: === [108884750693] pts=108884749478, 240 samples
[server] INFO: === [108884750930] pts=108884749478, 240 samples
[server] INFO: === [108884771031] pts=108884770769, 240 samples
[server] INFO: === [108884772903] pts=108884770769, 240 samples
[server] INFO: === [108884773080] pts=108884770769, 240 samples
[server] INFO: === [108884773297] pts=108884770769, 240 samples
[server] INFO: === [108884773458] pts=108884770769, 240 samples
[server] INFO: === [108884792424] pts=108884792143, 240 samples
[server] INFO: === [108884792934] pts=108884792143, 240 samples
[server] INFO: === [108884793270] pts=108884792143, 240 samples
[server] INFO: === [108884793476] pts=108884792143, 240 samples
[server] INFO: === [108884814184] pts=108884813802, 240 samples
[server] INFO: === [108884814996] pts=108884813802, 240 samples
[server] INFO: === [108884815293] pts=108884813802, 240 samples
[server] INFO: === [108884815699] pts=108884813802, 240 samples
[server] INFO: === [108884835662] pts=108884835426, 240 samples
[server] INFO: === [108884836120] pts=108884835426, 240 samples
[server] INFO: === [108884836272] pts=108884835426, 240 samples
[server] INFO: === [108884836421] pts=108884835426, 240 samples
[server] INFO: === [108884836583] pts=108884835426, 240 samples
[server] INFO: === [108884856346] pts=108884856136, 240 samples
[server] INFO: === [108884856642] pts=108884856136, 240 samples
[server] INFO: === [108884856818] pts=108884856136, 240 samples
[server] INFO: === [108884856966] pts=108884856136, 240 samples
[server] INFO: === [108884877873] pts=108884877492, 240 samples
[server] INFO: === [108884880128] pts=108884877492, 240 samples
[server] INFO: === [108884880560] pts=108884877492, 240 samples
[server] INFO: === [108884880978] pts=108884877492, 240 samples
[server] INFO: === [108884900852] pts=108884900208, 240 samples
[server] INFO: === [108884901571] pts=108884900208, 240 samples
[server] INFO: === [108884901791] pts=108884900208, 240 samples
[server] INFO: === [108884901952] pts=108884900208, 240 samples
[server] INFO: === [108884920451] pts=108884920197, 240 samples
[server] INFO: === [108884920888] pts=108884920197, 240 samples
[server] INFO: === [108884921145] pts=108884920197, 240 samples
[server] INFO: === [108884921530] pts=108884920197, 240 samples
[server] INFO: === [108884921777] pts=108884920197, 240 samples
[server] INFO: === [108884945288] pts=108884941511, 240 samples
[server] INFO: === [108884947180] pts=108884941511, 240 samples
[server] INFO: === [108884951672] pts=108884941511, 240 samples
[server] INFO: === [108884951994] pts=108884941511, 240 samples
[server] INFO: === [108884963391] pts=108884963104, 240 samples
[server] INFO: === [108884963858] pts=108884963104, 240 samples
[server] INFO: === [108884963991] pts=108884963104, 240 samples
[server] INFO: === [108884964172] pts=108884963104, 240 samples
[server] INFO: === [108884984966] pts=108884984313, 240 samples
[server] INFO: === [108884985417] pts=108884984313, 240 samples
[server] INFO: === [108884985552] pts=108884984313, 240 samples
[server] INFO: === [108884985663] pts=108884984313, 240 samples
[server] INFO: === [108885005654] pts=108885005415, 240 samples
[server] INFO: === [108885006185] pts=108885005415, 240 samples
[server] INFO: === [108885006285] pts=108885005415, 240 samples
[server] INFO: === [108885006381] pts=108885005415, 240 samples
[server] INFO: === [108885006475] pts=108885005415, 240 samples
[server] INFO: === [108885027686] pts=108885027413, 240 samples
[server] INFO: === [108885028424] pts=108885027413, 240 samples
[server] INFO: === [108885028674] pts=108885027413, 240 samples
[server] INFO: === [108885029992] pts=108885027413, 240 samples
[server] INFO: === [108885048614] pts=108885048238, 240 samples
[server] INFO: === [108885048996] pts=108885048238, 240 samples
[server] INFO: === [108885049167] pts=108885048238, 240 samples
[server] INFO: === [108885049325] pts=108885048238, 240 samples
[server] INFO: === [108885069639] pts=108885069429, 240 samples
[server] INFO: === [108885069986] pts=108885069429, 240 samples
[server] INFO: === [108885070109] pts=108885069429, 240 samples
[server] INFO: === [108885070207] pts=108885069429, 240 samples
[server] INFO: === [108885091110] pts=108885090785, 240 samples
[server] INFO: === [108885091599] pts=108885090785, 240 samples
[server] INFO: === [108885091779] pts=108885090785, 240 samples
[server] INFO: === [108885091939] pts=108885090785, 240 samples
[server] INFO: === [108885092371] pts=108885090785, 240 samples
[server] INFO: === [108885113070] pts=108885112707, 240 samples
[server] INFO: === [108885113721] pts=108885112707, 240 samples
[server] INFO: === [108885113978] pts=108885112707, 240 samples
[server] INFO: === [108885114215] pts=108885112707, 240 samples
[server] INFO: === [108885133804] pts=108885133411, 240 samples
[server] INFO: === [108885134213] pts=108885133411, 240 samples
[server] INFO: === [108885134397] pts=108885133411, 240 samples
[server] INFO: === [108885134605] pts=108885133411, 240 samples
[server] INFO: === [108885155015] pts=108885154762, 240 samples
[server] INFO: === [108885155524] pts=108885154762, 240 samples
[server] INFO: === [108885157304] pts=108885154762, 240 samples
[server] INFO: === [108885158480] pts=108885154762, 240 samples
[server] INFO: === [108885158925] pts=108885154762, 240 samples
[server] INFO: === [108885177289] pts=108885176341, 240 samples
[server] INFO: === [108885177739] pts=108885176341, 240 samples
[server] INFO: === [108885177973] pts=108885176341, 240 samples
[server] INFO: === [108885178154] pts=108885176341, 240 samples
[server] INFO: === [108885197681] pts=108885197458, 240 samples
[server] INFO: === [108885198348] pts=108885197458, 240 samples
[server] INFO: === [108885199263] pts=108885197458, 240 samples
[server] INFO: === [108885199510] pts=108885197458, 240 samples
[server] INFO: === [108885219029] pts=108885218808, 240 samples
[server] INFO: === [108885219479] pts=108885218808, 240 samples
[server] INFO: === [108885219659] pts=108885218808, 240 samples
[server] INFO: === [108885220282] pts=108885218808, 240 samples
[server] INFO: === [108885240479] pts=108885240183, 240 samples
[server] INFO: === [108885240961] pts=108885240183, 240 samples
[server] INFO: === [108885241263] pts=108885240183, 240 samples
[server] INFO: === [108885241845] pts=108885240183, 240 samples
[server] INFO: === [108885242148] pts=108885240183, 240 samples
[server] INFO: === [108885261769] pts=108885261494, 240 samples
[server] INFO: === [108885262327] pts=108885261494, 240 samples
[server] INFO: === [108885262669] pts=108885261494, 240 samples
[server] INFO: === [108885262919] pts=108885261494, 240 samples
[server] INFO: === [108885283435] pts=108885283166, 240 samples
[server] INFO: === [108885284066] pts=108885283166, 240 samples
[server] INFO: === [108885284311] pts=108885283166, 240 samples
[server] INFO: === [108885284483] pts=108885283166, 240 samples
[server] INFO: === [108885304609] pts=108885304182, 240 samples
[server] INFO: === [108885305090] pts=108885304182, 240 samples
[server] INFO: === [108885305274] pts=108885304182, 240 samples
[server] INFO: === [108885305479] pts=108885304182, 240 samples
[server] INFO: === [108885326947] pts=108885325473, 240 samples
[server] INFO: === [108885327451] pts=108885325473, 240 samples
[server] INFO: === [108885327764] pts=108885325473, 240 samples
[server] INFO: === [108885327998] pts=108885325473, 240 samples
[server] INFO: === [108885328325] pts=108885325473, 240 samples
[server] INFO: === [108885347157] pts=108885346848, 240 samples
[server] INFO: === [108885348639] pts=108885346848, 240 samples
[server] INFO: === [108885349439] pts=108885346848, 240 samples
[server] INFO: === [108885350147] pts=108885346848, 240 samples
[server] INFO: === [108885368409] pts=108885368184, 240 samples
[server] INFO: === [108885368801] pts=108885368184, 240 samples
[server] INFO: === [108885368992] pts=108885368184, 240 samples
[server] INFO: === [108885369172] pts=108885368184, 240 samples
[server] INFO: === [108885389731] pts=108885389486, 240 samples
[server] INFO: === [108885390218] pts=108885389486, 240 samples
[server] INFO: === [108885390461] pts=108885389486, 240 samples
[server] INFO: === [108885390683] pts=108885389486, 240 samples
[server] INFO: === [108885411109] pts=108885410836, 240 samples
[server] INFO: === [108885411658] pts=108885410836, 240 samples
[server] INFO: === [108885411901] pts=108885410836, 240 samples
[server] INFO: === [108885412231] pts=108885410836, 240 samples
[server] INFO: === [108885412509] pts=108885410836, 240 samples
[server] INFO: === [108885432513] pts=108885432142, 240 samples
[server] INFO: === [108885432972] pts=108885432142, 240 samples
[server] INFO: === [108885433224] pts=108885432142, 240 samples
[server] INFO: === [108885433407] pts=108885432142, 240 samples
[server] INFO: === [108885453701] pts=108885453483, 240 samples
[server] INFO: === [108885454190] pts=108885453483, 240 samples
[server] INFO: === [108885454382] pts=108885453483, 240 samples
[server] INFO: === [108885454565] pts=108885453483, 240 samples
[server] INFO: === [108885475025] pts=108885474790, 240 samples
[server] INFO: === [108885476824] pts=108885474790, 240 samples
[server] INFO: === [108885477337] pts=108885474790, 240 samples
[server] INFO: === [108885478984] pts=108885474790, 240 samples
[server] INFO: === [108885479262] pts=108885474790, 240 samples
[server] INFO: === [108885496416] pts=108885496189, 240 samples
[server] INFO: === [108885496830] pts=108885496189, 240 samples
[server] INFO: === [108885497539] pts=108885496189, 240 samples
[server] INFO: === [108885497919] pts=108885496189, 240 samples
[server] INFO: === [108885517697] pts=108885517445, 240 samples
[server] INFO: === [108885518106] pts=108885517445, 240 samples
[server] INFO: === [108885518247] pts=108885517445, 240 samples
[server] INFO: === [108885518416] pts=108885517445, 240 samples
[server] INFO: === [108885538986] pts=108885538750, 240 samples
[server] INFO: === [108885539384] pts=108885538750, 240 samples
[server] INFO: === [108885539534] pts=108885538750, 240 samples
[server] INFO: === [108885539675] pts=108885538750, 240 samples
[server] INFO: === [108885560431] pts=108885560143, 240 samples
[server] INFO: === [108885560821] pts=108885560143, 240 samples
[server] INFO: === [108885560942] pts=108885560143, 240 samples
[server] INFO: === [108885561092] pts=108885560143, 240 samples
[server] INFO: === [108885561206] pts=108885560143, 240 samples
[server] INFO: === [108885581905] pts=108885581426, 240 samples
[server] INFO: === [108885582311] pts=108885581426, 240 samples
[server] INFO: === [108885582527] pts=108885581426, 240 samples
[server] INFO: === [108885582892] pts=108885581426, 240 samples
[server] INFO: === [108885603143] pts=108885602790, 240 samples
[server] INFO: === [108885603566] pts=108885602790, 240 samples
[server] INFO: === [108885603779] pts=108885602790, 240 samples
[server] INFO: === [108885603980] pts=108885602790, 240 samples
[server] INFO: === [108885625669] pts=108885625400, 240 samples
[server] INFO: === [108885626732] pts=108885625400, 240 samples
[server] INFO: === [108885626880] pts=108885625400, 240 samples
[server] INFO: === [108885627064] pts=108885625400, 240 samples
[server] INFO: === [108885645920] pts=108885645600, 240 samples
[server] INFO: === [108885646386] pts=108885645600, 240 samples
[server] INFO: === [108885646698] pts=108885645600, 240 samples
[server] INFO: === [108885646977] pts=108885645600, 240 samples
[server] INFO: === [108885647213] pts=108885645600, 240 samples
[server] INFO: === [108885667129] pts=108885666797, 240 samples
[server] INFO: === [108885667723] pts=108885666797, 240 samples
[server] INFO: === [108885667909] pts=108885666797, 240 samples
[server] INFO: === [108885668214] pts=108885666797, 240 samples
[server] INFO: === [108885688507] pts=108885688168, 240 samples
[server] INFO: === [108885688932] pts=108885688168, 240 samples
[server] INFO: === [108885689189] pts=108885688168, 240 samples
[server] INFO: === [108885689524] pts=108885688168, 240 samples
[server] INFO: === [108885710502] pts=108885710025, 240 samples
[server] INFO: === [108885710975] pts=108885710025, 240 samples
[server] INFO: === [108885711735] pts=108885710025, 240 samples
[server] INFO: === [108885712692] pts=108885710025, 240 samples
[server] INFO: === [108885731402] pts=108885730837, 240 samples
[server] INFO: === [108885731899] pts=108885730837, 240 samples
[server] INFO: === [108885732390] pts=108885730837, 240 samples
[server] INFO: === [108885732569] pts=108885730837, 240 samples
[server] INFO: === [108885732869] pts=108885730837, 240 samples
[server] INFO: === [108885752826] pts=108885752137, 240 samples
[server] INFO: === [108885753276] pts=108885752137, 240 samples
[server] INFO: === [108885753399] pts=108885752137, 240 samples
[server] INFO: === [108885753505] pts=108885752137, 240 samples
[server] INFO: === [108885774004] pts=108885773409, 240 samples
[server] INFO: === [108885774844] pts=108885773409, 240 samples
[server] INFO: === [108885775016] pts=108885773409, 240 samples
[server] INFO: === [108885775140] pts=108885773409, 240 samples
[server] INFO: === [108885794970] pts=108885794743, 240 samples
[server] INFO: === [108885795306] pts=108885794743, 240 samples
[server] INFO: === [108885795450] pts=108885794743, 240 samples
[server] INFO: === [108885795734] pts=108885794743, 240 samples
[server] INFO: === [108885795887] pts=108885794743, 240 samples
[server] INFO: === [108885816501] pts=108885816170, 240 samples
[server] INFO: === [108885816984] pts=108885816170, 240 samples
[server] INFO: === [108885817261] pts=108885816170, 240 samples
[server] INFO: === [108885817550] pts=108885816170, 240 samples
[server] INFO: === [108885837600] pts=108885837415, 240 samples
[server] INFO: === [108885838124] pts=108885837415, 240 samples
[server] INFO: === [108885838321] pts=108885837415, 240 samples
[server] INFO: === [108885838505] pts=108885837415, 240 samples
[server] INFO: === [108885859074] pts=108885858784, 240 samples
[server] INFO: === [108885859534] pts=108885858784, 240 samples
[server] INFO: === [108885859719] pts=108885858784, 240 samples
[server] INFO: === [108885860481] pts=108885858784, 240 samples
[server] INFO: === [108885880970] pts=108885880202, 240 samples
[server] INFO: === [108885881468] pts=108885880202, 240 samples
[server] INFO: === [108885881653] pts=108885880202, 240 samples
[server] INFO: === [108885881827] pts=108885880202, 240 samples
[server] INFO: === [108885881995] pts=108885880202, 240 samples
[server] INFO: === [108885901716] pts=108885901454, 240 samples
[server] INFO: === [108885902147] pts=108885901454, 240 samples
[server] INFO: === [108885902338] pts=108885901454, 240 samples
[server] INFO: === [108885902537] pts=108885901454, 240 samples
[server] INFO: === [108885923129] pts=108885922801, 240 samples
[server] INFO: === [108885923569] pts=108885922801, 240 samples
[server] INFO: === [108885923811] pts=108885922801, 240 samples
[server] INFO: === [108885924382] pts=108885922801, 240 samples
[server] INFO: === [108885944797] pts=108885944265, 240 samples
[server] INFO: === [108885945363] pts=108885944265, 240 samples
[server] INFO: === [108885945610] pts=108885944265, 240 samples
[server] INFO: === [108885945978] pts=108885944265, 240 samples
[server] INFO: === [108885965729] pts=108885965453, 240 samples
[server] INFO: === [108885966447] pts=108885965453, 240 samples
[server] INFO: === [108885966624] pts=108885965453, 240 samples
[server] INFO: === [108885966759] pts=108885965453, 240 samples
[server] INFO: === [108885966888] pts=108885965453, 240 samples
[server] INFO: === [108885987224] pts=108885986960, 240 samples
[server] INFO: === [108885987851] pts=108885986960, 240 samples
[server] INFO: === [108885987996] pts=108885986960, 240 samples
[server] INFO: === [108885988324] pts=108885986960, 240 samples
[server] INFO: === [108886008354] pts=108886008113, 240 samples
[server] INFO: === [108886008748] pts=108886008113, 240 samples
[server] INFO: === [108886008931] pts=108886008113, 240 samples
[server] INFO: === [108886009031] pts=108886008113, 240 samples
[server] INFO: === [108886029784] pts=108886029465, 240 samples
[server] INFO: === [108886030527] pts=108886029465, 240 samples
[server] INFO: === [108886030757] pts=108886029465, 240 samples
[server] INFO: === [108886031033] pts=108886029465, 240 samples
[server] INFO: === [108886051035] pts=108886050761, 240 samples
[server] INFO: === [108886051426] pts=108886050761, 240 samples
[server] INFO: === [108886051660] pts=108886050761, 240 samples
[server] INFO: === [108886051882] pts=108886050761, 240 samples
[server] INFO: === [108886052151] pts=108886050761, 240 samples
[server] INFO: === [108886072454] pts=108886072171, 240 samples
[server] INFO: === [108886072868] pts=108886072171, 240 samples
[server] INFO: === [108886073083] pts=108886072171, 240 samples
[server] INFO: === [108886073693] pts=108886072171, 240 samples
[server] INFO: === [108886093772] pts=108886093464, 240 samples
[server] INFO: === [108886094339] pts=108886093464, 240 samples
[server] INFO: === [108886094522] pts=108886093464, 240 samples
[server] INFO: === [108886094741] pts=108886093464, 240 samples
[server] INFO: === [108886115058] pts=108886114787, 240 samples
[server] INFO: === [108886115462] pts=108886114787, 240 samples
[server] INFO: === [108886115697] pts=108886114787, 240 samples
[server] INFO: === [108886115971] pts=108886114787, 240 samples
[server] INFO: === [108886116252] pts=108886114787, 240 samples
[server] INFO: === [108886136473] pts=108886136157, 240 samples
[server] INFO: === [108886136988] pts=108886136157, 240 samples
[server] INFO: === [108886137279] pts=108886136157, 240 samples
[server] INFO: === [108886137605] pts=108886136157, 240 samples
[server] INFO: === [108886159796] pts=108886136157, 240 samples
[server] INFO: === [108886160656] pts=108886136157, 240 samples
[server] INFO: === [108886161136] pts=108886158946, 240 samples
[server] INFO: === [108886161444] pts=108886158946, 240 samples
[server] INFO: === [108886178905] pts=108886178743, 240 samples
[server] INFO: === [108886179238] pts=108886178743, 240 samples
[server] INFO: === [108886179379] pts=108886178743, 240 samples
[server] INFO: === [108886179726] pts=108886178743, 240 samples
[server] INFO: === [108886200262] pts=108886200097, 240 samples
[server] INFO: === [108886200542] pts=108886200097, 240 samples
[server] INFO: === [108886200653] pts=108886200097, 240 samples
[server] INFO: === [108886200798] pts=108886200097, 240 samples
[server] INFO: === [108886200896] pts=108886200097, 240 samples
[server] INFO: === [108886221653] pts=108886221470, 240 samples
[server] INFO: === [108886222906] pts=108886221470, 240 samples
[server] INFO: === [108886223073] pts=108886221470, 240 samples
[server] INFO: === [108886223212] pts=108886221470, 240 samples
[server] INFO: === [108886243448] pts=108886242850, 240 samples
[server] INFO: === [108886244259] pts=108886242850, 240 samples
[server] INFO: === [108886244585] pts=108886242850, 240 samples
[server] INFO: === [108886244848] pts=108886242850, 240 samples
[server] INFO: === [108886264964] pts=108886264219, 240 samples
[server] INFO: === [108886265506] pts=108886264219, 240 samples
[server] INFO: === [108886265731] pts=108886264219, 240 samples
[server] INFO: === [108886266038] pts=108886264219, 240 samples
[server] INFO: === [108886286381] pts=108886285502, 240 samples
[server] INFO: === [108886286926] pts=108886285502, 240 samples
[server] INFO: === [108886287204] pts=108886285502, 240 samples
[server] INFO: === [108886287425] pts=108886285502, 240 samples
[server] INFO: === [108886288173] pts=108886285502, 240 samples
[server] INFO: === [108886307238] pts=108886306854, 240 samples
[server] INFO: === [108886307775] pts=108886306854, 240 samples
[server] INFO: === [108886308661] pts=108886306854, 240 samples
[server] INFO: === [108886308999] pts=108886306854, 240 samples
[server] INFO: === [108886329508] pts=108886328181, 240 samples
[server] INFO: === [108886330010] pts=108886328181, 240 samples
[server] INFO: === [108886330298] pts=108886328181, 240 samples
[server] INFO: === [108886330542] pts=108886328181, 240 samples
[server] INFO: === [108886349797] pts=108886349492, 240 samples
[server] INFO: === [108886350321] pts=108886349492, 240 samples
[server] INFO: === [108886350492] pts=108886349492, 240 samples
[server] INFO: === [108886350651] pts=108886349492, 240 samples
[server] INFO: === [108886370956] pts=108886370762, 240 samples
[server] INFO: === [108886371418] pts=108886370762, 240 samples
[server] INFO: === [108886371595] pts=108886370762, 240 samples
[server] INFO: === [108886371743] pts=108886370762, 240 samples
[server] INFO: === [108886371888] pts=108886370762, 240 samples
[server] INFO: === [108886392698] pts=108886392415, 240 samples
[server] INFO: === [108886393111] pts=108886392415, 240 samples
[server] INFO: === [108886393284] pts=108886392415, 240 samples
[server] INFO: === [108886393459] pts=108886392415, 240 samples
[server] INFO: === [108886413827] pts=108886413520, 240 samples
[server] INFO: === [108886414672] pts=108886413520, 240 samples
[server] INFO: === [108886415003] pts=108886413520, 240 samples
[server] INFO: === [108886415879] pts=108886413520, 240 samples
[server] INFO: === [108886435102] pts=108886434832, 240 samples
[server] INFO: === [108886435772] pts=108886434832, 240 samples
[server] INFO: === [108886436253] pts=108886434832, 240 samples
[server] INFO: === [108886436870] pts=108886434832, 240 samples
[server] INFO: === [108886437259] pts=108886434832, 240 samples
[server] INFO: === [108886456889] pts=108886456410, 240 samples
[server] INFO: === [108886459464] pts=108886456410, 240 samples
[server] INFO: === [108886459880] pts=108886456410, 240 samples
[server] INFO: === [108886460380] pts=108886456410, 240 samples
[server] INFO: === [108886478016] pts=108886477734, 240 samples
[server] INFO: === [108886478812] pts=108886477734, 240 samples
[server] INFO: === [108886479105] pts=108886477734, 240 samples
[server] INFO: === [108886479350] pts=108886477734, 240 samples
[server] INFO: === [108886499207] pts=108886498867, 240 samples
[server] INFO: === [108886499820] pts=108886498867, 240 samples
[server] INFO: === [108886500855] pts=108886498867, 240 samples
[server] INFO: === [108886501179] pts=108886498867, 240 samples
[server] INFO: === [108886520439] pts=108886520190, 240 samples
[server] INFO: === [108886520931] pts=108886520190, 240 samples
[server] INFO: === [108886521176] pts=108886520190, 240 samples
[server] INFO: === [108886521406] pts=108886520190, 240 samples
[server] INFO: === [108886522855] pts=108886520190, 240 samples
[server] INFO: === [108886541868] pts=108886541540, 240 samples
[server] INFO: === [108886542471] pts=108886541540, 240 samples
[server] INFO: === [108886542955] pts=108886541540, 240 samples
[server] INFO: === [108886543300] pts=108886541540, 240 samples
[server] INFO: === [108886563264] pts=108886562864, 240 samples
[server] INFO: === [108886563906] pts=108886562864, 240 samples
[server] INFO: === [108886564305] pts=108886562864, 240 samples
[server] INFO: === [108886564544] pts=108886562864, 240 samples
[server] INFO: === [108886584297] pts=108886584108, 240 samples
[server] INFO: === [108886584646] pts=108886584108, 240 samples
[server] INFO: === [108886584749] pts=108886584108, 240 samples
[server] INFO: === [108886584848] pts=108886584108, 240 samples
[server] INFO: === [108886607024] pts=108886606541, 240 samples
[server] INFO: === [108886607552] pts=108886606541, 240 samples
[server] INFO: === [108886607843] pts=108886606541, 240 samples
[server] INFO: === [108886609644] pts=108886606541, 240 samples
[server] INFO: === [108886609999] pts=108886606541, 240 samples
[server] INFO: === [108886627432] pts=108886626905, 240 samples
[server] INFO: === [108886628566] pts=108886626905, 240 samples
[server] INFO: === [108886628964] pts=108886626905, 240 samples
[server] INFO: === [108886629227] pts=108886626905, 240 samples
[server] INFO: === [108886648295] pts=108886648122, 240 samples
[server] INFO: === [108886648718] pts=108886648122, 240 samples
[server] INFO: === [108886648861] pts=108886648122, 240 samples
[server] INFO: === [108886648995] pts=108886648122, 240 samples
[server] INFO: === [108886669928] pts=108886669513, 240 samples
[server] INFO: === [108886672250] pts=108886669513, 240 samples
[server] INFO: === [108886672757] pts=108886669513, 240 samples
[server] INFO: === [108886674774] pts=108886669513, 240 samples
[server] INFO: === [108886691433] pts=108886691069, 240 samples
[server] INFO: === [108886691928] pts=108886691069, 240 samples
[server] INFO: === [108886692430] pts=108886691069, 240 samples
[server] INFO: === [108886692737] pts=108886691069, 240 samples
[server] INFO: === [108886693023] pts=108886691069, 240 samples
[server] INFO: === [108886712465] pts=108886712217, 240 samples
[server] INFO: === [108886712941] pts=108886712217, 240 samples
[server] INFO: === [108886713159] pts=108886712217, 240 samples
[server] INFO: === [108886713358] pts=108886712217, 240 samples
[server] INFO: === [108886733693] pts=108886733445, 240 samples
[server] INFO: === [108886734446] pts=108886733445, 240 samples
[server] INFO: === [108886734574] pts=108886733445, 240 samples
[server] INFO: === [108886734681] pts=108886733445, 240 samples
[server] INFO: === [108886755001] pts=108886754768, 240 samples
[server] INFO: === [108886755504] pts=108886754768, 240 samples
[server] INFO: === [108886755636] pts=108886754768, 240 samples
[server] INFO: === [108886757530] pts=108886754768, 240 samples
[server] INFO: === [108886757663] pts=108886754768, 240 samples
[server] INFO: === [108886776512] pts=108886776341, 240 samples
[server] INFO: === [108886776950] pts=108886776341, 240 samples
[server] INFO: === [108886777060] pts=108886776341, 240 samples
[server] INFO: === [108886777158] pts=108886776341, 240 samples
[server] INFO: === [108886797722] pts=108886797453, 240 samples
[server] INFO: === [108886798225] pts=108886797453, 240 samples
[server] INFO: === [108886798415] pts=108886797453, 240 samples
[server] INFO: === [108886798589] pts=108886797453, 240 samples
[server] INFO: === [108886818995] pts=108886818766, 240 samples
[server] INFO: === [108886819645] pts=108886818766, 240 samples
[server] INFO: === [108886819870] pts=108886818766, 240 samples
[server] INFO: === [108886820373] pts=108886818766, 240 samples
[server] INFO: === [108886840665] pts=108886840198, 240 samples
[server] INFO: === [108886841460] pts=108886840198, 240 samples
[server] INFO: === [108886841727] pts=108886840198, 240 samples
[server] INFO: === [108886841958] pts=108886840198, 240 samples
[server] INFO: === [108886842191] pts=108886840198, 240 samples
[server] INFO: === [108886861850] pts=108886861587, 240 samples
[server] INFO: === [108886862352] pts=108886861587, 240 samples
[server] INFO: === [108886862489] pts=108886861587, 240 samples
[server] INFO: === [108886862619] pts=108886861587, 240 samples
[server] INFO: === [108886883021] pts=108886882755, 240 samples
[server] INFO: === [108886883477] pts=108886882755, 240 samples
[server] INFO: === [108886883655] pts=108886882755, 240 samples
[server] INFO: === [108886883822] pts=108886882755, 240 samples
[server] INFO: === [108886905010] pts=108886904224, 240 samples
[server] INFO: === [108886905618] pts=108886904224, 240 samples
[server] INFO: === [108886905831] pts=108886904224, 240 samples
[server] INFO: === [108886906027] pts=108886904224, 240 samples
[server] INFO: === [108886926333] pts=108886925678, 240 samples
[server] INFO: === [108886927116] pts=108886925678, 240 samples
[server] INFO: === [108886927286] pts=108886925678, 240 samples
[server] INFO: === [108886927448] pts=108886925678, 240 samples
[server] INFO: === [108886927609] pts=108886925678, 240 samples
[server] INFO: === [108886947040] pts=108886946783, 240 samples
[server] INFO: === [108886947496] pts=108886946783, 240 samples
[server] INFO: === [108886947643] pts=108886946783, 240 samples
[server] INFO: === [108886947780] pts=108886946783, 240 samples
[server] INFO: === [108886968462] pts=108886968175, 240 samples
[server] INFO: === [108886970400] pts=108886968175, 240 samples
[server] INFO: === [108886970673] pts=108886968175, 240 samples
[server] INFO: === [108886970848] pts=108886968175, 240 samples
[server] INFO: === [108886989614] pts=108886989401, 240 samples
[server] INFO: === [108886990026] pts=108886989401, 240 samples
[server] INFO: === [108886990144] pts=108886989401, 240 samples
[server] INFO: === [108886990266] pts=108886989401, 240 samples
[server] INFO: === [108887011015] pts=108887010751, 240 samples
[server] INFO: === [108887011568] pts=108887010751, 240 samples
[server] INFO: === [108887011690] pts=108887010751, 240 samples
[server] INFO: === [108887011791] pts=108887010751, 240 samples
[server] INFO: === [108887011890] pts=108887010751, 240 samples
[server] INFO: === [108887032514] pts=108887032171, 240 samples
[server] INFO: === [108887033179] pts=108887032171, 240 samples
[server] INFO: === [108887033402] pts=108887032171, 240 samples
[server] INFO: === [108887033635] pts=108887032171, 240 samples
[server] INFO: === [108887053728] pts=108887053460, 240 samples

@rom1v
Copy link
Collaborator

rom1v commented Jun 6, 2023

OK, thank you for your tests.

So the audio capture is correct. This is consistent with the fact that the recorded file is correct, but not consistent with the buffer underflows in #4055 (comment) (so it is caused by something else).

I don't know what the problem is, but the behavior is clearly not correct in your case.

Do you have access to another Android device (on the same computer), or another computer (to mirror the same Android device)?

@rom1v
Copy link
Collaborator

rom1v commented Jun 6, 2023

Let's log the actual rate on both sides of the audio buffer:

diff
diff --git a/app/src/audio_player.c b/app/src/audio_player.c
index 8f0ad7fba..5eb914d05 100644
--- a/app/src/audio_player.c
+++ b/app/src/audio_player.c
@@ -5,7 +5,7 @@
 
 #include "util/log.h"
 
-#define SC_AUDIO_PLAYER_NDEBUG // comment to debug
+//#define SC_AUDIO_PLAYER_NDEBUG // comment to debug
 
 /**
  * Real-time audio player with configurable latency
@@ -74,7 +74,8 @@ sc_audio_player_sdl_callback(void *userdata, uint8_t *stream, int len_int) {
     uint32_t count = TO_SAMPLES(len);
 
 #ifndef SC_AUDIO_PLAYER_NDEBUG
-    LOGD("[Audio] SDL callback requests %" PRIu32 " samples", count);
+    LOGD("[Audio] [%" PRItick "] SDL callback requests %" PRIu32 " samples",
+         sc_tick_now(), count);
 #endif
 
     uint32_t buffered_samples = sc_audiobuf_can_read(&ap->buf);
@@ -91,8 +92,12 @@ sc_audio_player_sdl_callback(void *userdata, uint8_t *stream, int len_int) {
             memset(stream, 0, len);
             return;
         }
+
+        ap->stats.start_play = sc_tick_now();
     }
 
+    ap->stats.samples_played += count;
+
     uint32_t read = MIN(buffered_samples, count);
     if (read) {
         sc_audiobuf_read(&ap->buf, stream, read);
@@ -116,6 +121,10 @@ sc_audio_player_sdl_callback(void *userdata, uint8_t *stream, int len_int) {
     }
 
     ap->played = true;
+
+    sc_tick duration = sc_tick_now() - ap->stats.start_play;
+    uint64_t freq = ap->stats.samples_played * SC_TICK_FREQ / duration;
+    LOGI("=== [aout] %" PRIu64 " samples played per second", freq);
 }
 
 static uint8_t *
@@ -141,6 +150,11 @@ sc_audio_player_frame_sink_push(struct sc_frame_sink *sink,
                                 const AVFrame *frame) {
     struct sc_audio_player *ap = DOWNCAST(sink);
 
+    if (!ap->stats.start_recv) {
+        ap->stats.start_recv = sc_tick_now();
+    }
+    ap->stats.samples_received += frame->nb_samples;
+
     SwrContext *swr_ctx = ap->swr_ctx;
 
     int64_t swr_delay = swr_get_delay(swr_ctx, ap->sample_rate);
@@ -315,6 +329,10 @@ sc_audio_player_frame_sink_push(struct sc_frame_sink *sink,
         }
     }
 
+    sc_tick duration = sc_tick_now() - ap->stats.start_recv;
+    uint64_t freq = ap->stats.samples_received * SC_TICK_FREQ / duration;
+    LOGI("=== [buffer] %" PRIu64 " samples received per second", freq);
+
     return true;
 }
 
@@ -425,6 +443,11 @@ sc_audio_player_frame_sink_open(struct sc_frame_sink *sink,
     ap->underflow = 0;
     ap->compensation = 0;
 
+    ap->stats.samples_received = 0;
+    ap->stats.samples_played = 0;
+    ap->stats.start_recv = 0;
+    ap->stats.start_play = 0;
+
     // The thread calling open() is the thread calling push(), which fills the
     // audio buffer consumed by the SDL audio thread.
     ok = sc_thread_set_priority(SC_THREAD_PRIORITY_TIME_CRITICAL);
diff --git a/app/src/audio_player.h b/app/src/audio_player.h
index a03e9e35f..79424130d 100644
--- a/app/src/audio_player.h
+++ b/app/src/audio_player.h
@@ -77,6 +77,13 @@ struct sc_audio_player {
 
     const struct sc_audio_player_callbacks *cbs;
     void *cbs_userdata;
+
+    struct {
+        uint64_t samples_received;
+        uint64_t samples_played;
+        sc_tick start_recv;
+        sc_tick start_play;
+    } stats;
 };
 
 struct sc_audio_player_callbacks {

Please keep it open for 10~15 seconds (it will flood a lot).

I suggest you redirect the output to a logfile and post that file here:

scrcpy --audio-output-buffer=20 --audio-buffer=100 --no-video > logs.txt

@chikinrais
Copy link
Author

I don't have a second computer, but I do have a Pixel3, with Android 12, and I used it to do a comparison test as you said.
I went through this latest kit you provided, using the same code you provided, the same music app, playing the same song, without any EQ app on, for about 15 seconds.
Here are the logs, 01 and 02 refer to the two songs I tried on both devices. Song 01 and song 02 were played for 15 seconds on both devices.
I still hear the same as above, the pitch problem in the first 5 seconds is still there, on both devices, other than that everything is fine.
logs(Oneplus9R_01).txt
logs(Oneplus9R_02).txt
logs(Pixel3_01).txt
logs(Pixel3_02).txt

@rom1v
Copy link
Collaborator

rom1v commented Jun 6, 2023

Thank you, so the results look good to me. The only "problem" is that the audio playback takes time to start, so it starts way after the capture is started, so at the beginning it must "catch up" real time audio (by dropping samples, when Buffering threshold exceeded are logged, then by "speeding up" playback for a few seconds, hence the pitch problem).

So the only "problem" here is that the audio output takes time to start. Out of curiosity, is it better with another driver: #3799 (comment)

:: in cmd
set SDL_AUDIODRIVER=directsound
scrcpy --audio-output-buffer=10

other than that everything is fine.

So in that case (apart from the first few seconds), you don't reproduce the initial issue where "the audio [you] hear is severely broken and completely unlistenable"?

Can you reproduce it with --audio-output-buffer=10? --audio-output-buffer=5? (I don't need the logs, just to know what is the observed problem).

To summarize what I have understood:

  • the sound is completely broken when you just run scrcpy without args
  • if you pass --audio-output-buffer=XXX, where XXX is some value (10, 20, 100…), it works fine except for the first few seconds where the pitch is too high (but this is expected if your audio output takes time to start, the buffer must "catch up")

Am I correct?

@chikinrais
Copy link
Author

I tried it again a few times with your latest kit.
Directsound doesn't seem to have a big impact on the whole, the cases that didn't have a big problem before still don't have a big problem, maybe a little bit more delay in operation if I may say so.
The first 5 seconds of the pitch problem was still there as well.

Then when I tried values 5 and 10 in Directsound:
(each time adding " > log.txt" at the end, otherwise the audio would be crushed by the delay caused by the log)

  • 10 brings the "frequent current noise" I mentioned here ( Audio crackling really bad #4055 (comment) ) and makes the music sound like it's slowing down a bit overall.
  • 5 would freeze the whole program immediately after the video feed appeared, and I couldn't do anything, and the music would not play. I had to close cmd to shut it down.

Out of curiosity, I also tried the set SDL_AUDIODRIVER=winmm you mentioned elsewhere, but the situation is basically the same as Directsound.

If I don't switch to Directsound at the beginning:

  • Everything is the same with a value of 10;
  • A value of 5 does not freeze the program, but it makes a loud noise that cannot be heard properly. It sounds like it's running straight through.

Finally, regarding your summary, there is basically nothing wrong, I would like to add some more details about each value.
Based on the above, I have reconfirmed the following values while maintaining the default audio driver:

  • First of all, all values have the problem of the first 5 seconds.

  • The minimum value to get normal performance looks to be 20.

  • 15 will get a momentary delay noise, like a drop of water, about once every few seconds.

  • A value of 10 makes this noise particularly frequent, as if it were raining heavily.

  • A value between 20 and 100 seems to make the pitch recover incompletely after 5 seconds of boost, but the difference is so small that I occasionally wonder if I'm hearing it wrong.
    Or is 20 just like this: after the first 5 seconds, the pitch goes back to "slightly higher", and then slowly returns to its original state after 10 seconds or so?
    I gradually started to get confused. I've been listening to it for over half an hour while comparing the same song on the scrcpy and direct computer playback.
    Now 20 seems to sound fine again after the first few tens of seconds.

  • 100 sounds perfectly normal after 5 seconds.

  • Values higher than 100 do not bring any benefit other than increased operating latency.

That's about it. Hope this helps you find something to fix the first 5 seconds.
It's not a big problem, but it's still uncomfortable if it happens every time.

@TrainedPro
Copy link

Hello, i seem to have the same issue but unlike OP, my phone and laptop are both fairly new. I am using an S21 Ultra with a HP Envy.
Command: scrcpy --lock-video-orientation=0 --max-size=2400 --max-fps=30 --record=aautput.mp4 --stay-awake --audio-output-buffer=100
Output

scrcpy 2.1.1 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     -->   (usb)  R5CR912GR3H                     device  SM_G998B
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed. 8.2 MB/s (56995 bytes in 0.007s)
[server] INFO: Device: [samsung] samsung SM-G998B (Android 13)
INFO: Recording started to mp4 file: aautput.mp4
INFO: Renderer: opengl
INFO: OpenGL version: 4.6 (Compatibility Profile) Mesa 22.2.5-0ubuntu0.1~22.04.3
INFO: Trilinear filtering enabled
INFO: Texture: 1080x2400
WARN: [FFmpeg] track 1: codec frame size is not set
^CINFO: Recording complete to mp4 file: aautput.mp4

The audio is extremely choppy and it is basically completely unusable. I used to do it without the output-buffer but it seems to make no difference whether i specify it or not. Maybe this is an issue related to my phone running on 130 fps while my command fixes it to 30, i tried it with 120 but the results were even worse.

Happy to do any testing that is needed.

@Nazunawa
Copy link

Similar to OP's problem, realtime audio is a little high pitched recording is fine. Very noticable when using tcp but often times works normally on usb. Im using scrcpy for its wireless mirroring and touch support, so id rather if there is a solution to let me use tcp

@AbdullahZubair
Copy link

@rom1v I want to get in touch with you brother. Can you please allow me to do so? We are a non-profit organization, working for the visually impaired community. We want to use your SCRCPY in a specific environment, we need some assistance. Can you please help?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants