コード例 #1
0
ファイル: webm2seq.go プロジェクト: jacereda/webm2seq
func main() {
	flag.Parse()
	if *in == "" {
		flag.Usage()
		return
	}
	for i := 0; i < *encoders; i++ {
		ch := make(chan encjob, 0)
		chans = append(chans, ch)
		ech := make(chan int, 0)
		endchans = append(endchans, ech)
		go encoder(ch, ech)
	}
	r, err := os.Open(*in)
	defer r.Close()
	if err != nil {
		log.Fatalf("Unable to open file '%s'", *in)
	}
	var wm webm.WebM
	reader, err := webm.Parse(r, &wm)
	if err != nil {
		log.Fatal("Unable to parse file: ", err)
	}
	vtrack := wm.FindFirstVideoTrack()
	vstream := webm.NewStream(vtrack)
	splitter := webm.NewSplitter(reader.Chan)
	splitter.Split(vstream)
	write(vstream.VideoChannel())
}
コード例 #2
0
ファイル: webmplay.go プロジェクト: jacereda/webmplay
func (a *app) OnInit() {
	var err error
	a.r, err = os.Open(*in)
	if err != nil {
		log.Fatalf("Unable to open file '%s': %s", *in, err)
	}
	var wm webm.WebM
	a.reader, err = webm.Parse(a.r, &wm)
	if err != nil {
		log.Fatal("Unable to parse file: ", err)
	}
	a.duration = wm.GetDuration()
	var vtrack *webm.TrackEntry
	if !*justaudio {
		vtrack = wm.FindFirstVideoTrack()
	}
	var vstream *webm.Stream
	if vtrack != nil {
		vstream = webm.NewStream(vtrack)
		a.fduration = vtrack.GetDefaultDuration()
		a.vchan = vstream.VideoChannel()
	}
	var atrack *webm.TrackEntry
	if !*justvideo {
		atrack = wm.FindFirstAudioTrack()
	}
	var astream *webm.Stream
	if atrack != nil {
		astream = webm.NewStream(atrack)
	}
	splitter := webm.NewSplitter(a.reader.Chan)
	splitter.Split(astream, vstream)

	a.steps = uint(0xffffffff)
	if a.vchan != nil {
		a.img = <-a.vchan
		a.pimg = a.img
	}

	if atrack != nil {
		channels := int(atrack.Audio.Channels)
		a.aw = &AudioWriter{ch: astream.AudioChannel(),
			channels: channels, active: true}
		chk(portaudio.Initialize())
		a.pastream, err = portaudio.OpenDefaultStream(0, channels,
			atrack.Audio.SamplingFrequency, 0, a.aw.processAudio)
		chk(err)
		chk(a.pastream.Start())
	}
}