insert free atom after moov make vlc play

This commit is contained in:
nareix 2015-11-21 20:32:57 +08:00
parent 637f47b250
commit b810c9a2fb
2 changed files with 14 additions and 2 deletions

View File

@ -7,7 +7,7 @@ import (
) )
func main() { func main() {
if _, err := mp4.Open("tiny2-avconv.mp4"); err != nil { if _, err := mp4.Open("mid.mp4"); err != nil {
log.Println(err) log.Println(err)
return return
} }

14
mp4.go
View File

@ -59,14 +59,26 @@ func Open(filename string) (file *File, err error) {
} }
if cc4 == "moov" { if cc4 == "moov" {
curPos, _ := outfile.Seek(0, 1)
origSize := ar.N+8
var moov *atom.Movie var moov *atom.Movie
if moov, err = atom.ReadMovie(ar); err != nil { if moov, err = atom.ReadMovie(ar); err != nil {
return return
} }
log.Println("regen moov", "tracks nr", len(moov.Tracks))
if err = atom.WriteMovie(outfile, moov); err != nil { if err = atom.WriteMovie(outfile, moov); err != nil {
return return
} }
curPosAfterRead, _ := outfile.Seek(0, 1)
bytesWritten := curPosAfterRead - curPos
log.Println("regen moov", "tracks nr", len(moov.Tracks),
"origSize", origSize, "bytesWritten", bytesWritten,
)
padSize := origSize - bytesWritten - 8
aw, _ := atom.WriteAtomHeader(outfile, "free")
atom.WriteDummy(outfile, int(padSize))
aw.Close()
} else { } else {
var aw *atom.Writer var aw *atom.Writer
if aw, err = atom.WriteAtomHeader(outfile, cc4); err != nil { if aw, err = atom.WriteAtomHeader(outfile, cc4); err != nil {