Open tinne26 opened 1 year ago
Something else is off:
package main
import ( "os" ; "log" ; "time" )
import "github.com/gen2brain/mpeg"
func main() {
// open file and initialize mpeg
file, err := os.Open(os.Args[1])
if err != nil { log.Fatal(err) }
mpg, err := mpeg.New(file)
if err != nil { log.Fatal(err) }
mpg.SetAudioCallback(func(_ *mpeg.MPEG, _ *mpeg.Samples) {})
mpg.SetVideoCallback(func(_ *mpeg.MPEG, _ *mpeg.Frame) { log.Print("callback") })
// seek and print times
ok := mpg.Seek(3*time.Second, false)
if !ok { log.Fatal("seek not ok") }
}
This calls the callback not once as stated in the documentation, but more than 30 times. In this case, this only happens when seek exact = false
. It could probably be a separate issue, but I think the two are closely related as something must be wrong with the seeking code, and any fix should probably attempt to correct all these issues at once. I'll look into it myself if I can next week, but I'll leave it here in the meantime in case someone else also encounters the issue or is motivated to try to fix it.
Curiously, 1 or 2 second seeks do not seem to trigger this.
@tinne26 Thanks for filling in the issues. I don't have time right now to check all this.
Don't worry, I also have other priorities at the moment, but if I get back to it and make any progress I'll contribute as I can.
Seems to only happen when the video time doesn't perfectly match the mpeg time. For example, the following program works fine if the seek position is
3000*time.Milliseconds
, but breaks at 3001 (requires passing the path to the mpeg file as an argument):Example output with
test.mpg
: