Welcome, Guest. Please login or register. Did you miss your activation email?

Author Topic: Audio playing too fast  (Read 1836 times)

0 Members and 1 Guest are viewing this topic.

iwastemoretimethanu

  • Newbie
  • *
  • Posts: 2
    • View Profile
    • Email
Audio playing too fast
« on: May 09, 2013, 06:31:40 pm »
I'm not sure if anyone else has ran into this but the audio is playing much faster than the video. Here is a little breakdown. Any help would be great, THANKS!

_Here is what I know_:

 * I know the sound being grabbed is correct because I made a playback
   test function.
 * I know the sound is being encoded into the video file because I can
   hear the sound when played in ffplay or any other player.

_Here is the problem_:

 * When the output video is played, the video starts off at the correct
   speed, but the audio is playing far too quickly.
     o For reference, my test output is supposed to be 20 seconds. With
       my current settings, this is 100 video frames and 100 audio
       frames at 5 FPS.
     o All 20 seconds of audio play in the first 5 seconds of the
       video, which shouldn't be happening simply because the audio and
       video are being encoded side-by-side (write_audio_frame() is
       being called directly after write_video_frame()).

_Here is what I have tried_:

 * Changing pts values before the encode, after the encode, using the
   native av_rescale_q() function to try and automatically set the pts
   value.
     o  I have done quite a bit of research on this and it seems to be
       the consensus that pts is supposed to be set before the frame is
       encoded into the packet, and I have a formula that should work
       for both the audio and video pts:
         + frame_count * (1000/STREAM_FRAME_RATE) * 90
         + ^ frame scale              ^ getting ms                   
               ^ pts is apparently supposed to be time * 90
 * Reducing the frames per second to a safe value (well-below the
   potential of the system)
 * Switching between the av_interleaved_write_frame() and the manual
   av_write_frame()

_Here is what I think the problem could be_:

 * I've always thought it could be the pts/dts that are off, as those
   are what are supposed to be controlling the speed/when the sound is
   played...but considering how many different ways I've modified these
   and tried things that I think should have worked with my
   understanding of them and how little any of my trials have mattered
   in the output file, I'm beginning to think the possibility of this
   being the problem is getting slimmer and slimmer.


_Technical details about the audio data (just in case)_:

 * Using SFML (Built off of OpenAL) to grab the data
 * Developing on Windows, audio data is being grabbed from the muxer
   with the microphone disabled.
 * The sound data is PCM, 16 bit (stored as int16_t*)
 * I started off using an algorithm that interlaced the audio with the
   video manually by using a method of
     o if audio->pts < video->pts, write another audio frame
     o else write video frame
 * I now just encode an audio frame after every video frame because it
   /should /sync itself, considering the audio is being grabbed while
   the video is being encoded
 * I have access to the raw buffered audio data (int16_t*), the sample
   rate (uint), the channel count (uint), and the sample count (size_t).

iwastemoretimethanu

  • Newbie
  • *
  • Posts: 2
    • View Profile
    • Email
Re: Audio playing too fast
« Reply #1 on: May 10, 2013, 06:06:26 pm »
Laurent...eXpl0it3r...HELPPPP  :'(

Laurent

  • Administrator
  • Hero Member
  • *****
  • Posts: 32504
    • View Profile
    • SFML's website
    • Email
Re: Audio playing too fast
« Reply #2 on: May 10, 2013, 06:13:43 pm »
I already answered your e-mail. But I'll repeat myself anyway: this is probably not the best place to ask for help, since your problem seems to be related to ffmpeg more than to SFML.
Laurent Gomila - SFML developer