func (m *Muxer) AddVideoStream(codecId uint32, width, height int) bool { codec := C.avcodec_find_encoder(codecId) if codec == (*C.AVCodec)(null) { return false } m.context.oformat.video_codec = codecId stream := C.avformat_new_stream(m.context, codec) if stream == (*C.AVStream)(null) { return false } m.videoStream = Stream{stream, 0} c := m.videoStream.stream.codec c.codec_id = codecId c.codec_type = C.AVMEDIA_TYPE_VIDEO c.bit_rate = 400000 c.width = C.int(width) c.height = C.int(height) m.videoStream.stream.time_base = C.AVRational{1, 30} c.time_base = m.videoStream.stream.time_base c.gop_size = 12 c.pix_fmt = C.AV_PIX_FMT_YUV420P if m.context.oformat.flags&C.AVFMT_GLOBALHEADER != 0 { c.flags |= C.CODEC_FLAG_GLOBAL_HEADER } if C.avcodec_open2(c, (*C.AVCodec)(null), (**C.AVDictionary)(null)) < 0 { return false } m.recl = append(m.recl, func() { C.avcodec_close(c) }) return true }
func (ctx *Context) NewStreamWithCodec(codec *avcodec.Codec) (*Stream, error) { var cCodec *C.AVCodec if codec != nil { cCodec = (*C.AVCodec)(unsafe.Pointer(codec.CAVCodec)) } cStream := C.avformat_new_stream(ctx.CAVFormatContext, cCodec) if cStream == nil { return nil, ErrAllocationError } return NewStreamFromC(unsafe.Pointer(cStream)), nil }
func (this *FmtCtx) NewStream(c *Codec) *Stream { var avCodec *_Ctype_AVCodec = nil if c != nil { avCodec = c.avCodec } if st := C.avformat_new_stream(this.avCtx, avCodec); st == nil { return nil } else { this.streams[int(st.index)] = &Stream{avStream: st, Pts: 0} return this.streams[int(st.index)] } }
func (m *Muxer) AddAudioStream(codecId uint32) bool { codec := C.avcodec_find_encoder(codecId) if codec == (*C.AVCodec)(null) { return false } m.context.oformat.audio_codec = codecId stream := C.avformat_new_stream(m.context, codec) if stream == (*C.AVStream)(null) { return false } m.audioStream = Stream{stream, 0} c := m.audioStream.stream.codec c.bit_rate = 48000 c.sample_fmt = C.AV_SAMPLE_FMT_S16 if C.check_sample_fmt(codec, c.sample_fmt) == 0 { return false } c.channels = 1 c.channel_layout = C.uint64_t(C.av_get_default_channel_layout(c.channels)) c.sample_rate = 44100 m.audioStream.stream.time_base = C.AVRational{1, c.sample_rate} c.time_base = m.audioStream.stream.time_base if m.context.oformat.flags&C.AVFMT_GLOBALHEADER != 0 { c.flags |= C.CODEC_FLAG_GLOBAL_HEADER } if codecId == C.AV_CODEC_ID_AAC { m.fifo = C.av_audio_fifo_alloc(c.sample_fmt, c.channels, 1) if m.fifo == (*C.AVAudioFifo)(null) { return false } m.recl = append(m.recl, func() { C.av_audio_fifo_free(m.fifo) }) } if C.avcodec_open2(c, (*C.AVCodec)(null), (**C.AVDictionary)(null)) < 0 { return false } m.recl = append(m.recl, func() { C.avcodec_close(c) }) if c.codec.capabilities&C.CODEC_CAP_VARIABLE_FRAME_SIZE != 0 { c.frame_size = 10000 } return true }
//Add a new stream to a media file. func (s *Context) AvformatNewStream(c *AvCodec) *Stream { return (*Stream)(C.avformat_new_stream((*C.struct_AVFormatContext)(s), (*C.struct_AVCodec)(c))) }
//AVStream * avformat_new_stream (AVFormatContext *s, const AVCodec *c) //Add a new stream to a media file. func Avformat_new_stream(s *AVFormatContext, c *AVCodec) *AVStream { return (*AVStream)(C.avformat_new_stream((*C.struct_AVFormatContext)(s), (*C.struct_AVCodec)(c))) }