Documentation ¶
Overview ¶
The oryx FLV package support bytes from/to FLV tags.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AudioChannels ¶
type AudioChannels uint8
The audio channels, FLV named it the SoundType. Refer to @doc video_file_format_spec_v10.pdf, @page 77, @section E.4.2 Audio Tags
const ( AudioChannelsMono AudioChannels = iota // 0 = Mono sound AudioChannelsStereo // 1 = Stereo sound AudioChannelsForbidden )
func (*AudioChannels) From ¶
func (v *AudioChannels) From(a aac.Channels)
func (AudioChannels) String ¶
func (v AudioChannels) String() string
type AudioCodec ¶
type AudioCodec uint8
The audio codec id, FLV named it the SoundFormat. Refer to @doc video_file_format_spec_v10.pdf, @page 76, @section E.4.2 Audio Tags
const ( AudioCodecLinearPCM AudioCodec = iota // 0 = Linear PCM, platform endian AudioCodecADPCM // 1 = ADPCM AudioCodecMP3 // 2 = MP3 AudioCodecLinearPCMle // 3 = Linear PCM, little endian AudioCodecNellymoser16kHz // 4 = Nellymoser 16 kHz mono AudioCodecNellymoser8kHz // 5 = Nellymoser 8 kHz mono AudioCodecNellymoser // 6 = Nellymoser AudioCodecG711Alaw // 7 = G.711 A-law logarithmic PCM AudioCodecG711MuLaw // 8 = G.711 mu-law logarithmic PCM AudioCodecReserved // 9 = reserved AudioCodecAAC // 10 = AAC AudioCodecSpeex // 11 = Speex AudioCodecUndefined12 AudioCodecUndefined13 AudioCodecMP3In8kHz // 14 = MP3 8 kHz AudioCodecDeviceSpecific // 15 = Device-specific sound AudioCodecForbidden )
func (AudioCodec) String ¶
func (v AudioCodec) String() string
type AudioFrame ¶
type AudioFrame struct { SoundFormat AudioCodec SoundRate AudioSamplingRate SoundSize AudioSampleBits SoundType AudioChannels Trait AudioFrameTrait Raw []byte }
type AudioFrameTrait ¶
type AudioFrameTrait uint8
The Audio AAC frame trait, whether sequence header(ASC) or raw data. Refer to @doc video_file_format_spec_v10.pdf, @page 77, @section E.4.2 Audio Tags
const ( AudioFrameTraitSequenceHeader AudioFrameTrait = iota // 0 = AAC sequence header AudioFrameTraitRaw // 1 = AAC raw AudioFrameTraitForbidden )
func (AudioFrameTrait) String ¶
func (v AudioFrameTrait) String() string
type AudioPackager ¶
type AudioPackager interface { // Encode the audio frame to FLV audio tag. Encode(frame *AudioFrame) (tag []byte, err error) // Decode the FLV audio tag to audio frame. Decode(tag []byte) (frame *AudioFrame, err error) }
The packager used to codec the FLV audio tag body. Refer to @doc video_file_format_spec_v10.pdf, @page 76, @section E.4.2 Audio Tags
func NewAudioPackager ¶
func NewAudioPackager() (AudioPackager, error)
type AudioSampleBits ¶
type AudioSampleBits uint8
The audio sample bits, FLV named it the SoundSize. Refer to @doc video_file_format_spec_v10.pdf, @page 76, @section E.4.2 Audio Tags
const ( AudioSampleBits8bits AudioSampleBits = iota // 0 = 8-bit samples AudioSampleBits16bits // 1 = 16-bit samples AudioSampleBitsForbidden )
func (AudioSampleBits) String ¶
func (v AudioSampleBits) String() string
type AudioSamplingRate ¶
type AudioSamplingRate uint8
The audio sampling rate, FLV named it the SoundRate. Refer to @doc video_file_format_spec_v10.pdf, @page 76, @section E.4.2 Audio Tags
const ( AudioSamplingRate5kHz AudioSamplingRate = iota // 0 = 5.5 kHz AudioSamplingRate11kHz // 1 = 11 kHz AudioSamplingRate22kHz // 2 = 22 kHz AudioSamplingRate44kHz // 3 = 44 kHz AudioSamplingRateForbidden )
func (*AudioSamplingRate) From ¶
func (v *AudioSamplingRate) From(a aac.SampleRateIndex)
Convert aac sample rate index to FLV sampling rate.
func (AudioSamplingRate) String ¶
func (v AudioSamplingRate) String() string
func (AudioSamplingRate) ToHz ¶
func (v AudioSamplingRate) ToHz() int
Parse the FLV sampling rate to Hz.
type Demuxer ¶
type Demuxer interface { // Read the FLV header, return the version of FLV, whether hasVideo or hasAudio in header. ReadHeader() (version uint8, hasVideo, hasAudio bool, err error) // Read the FLV tag header, return the tag information, especially the tag size, // then user can read the tag payload. ReadTagHeader() (tagType TagType, tagSize, timestamp uint32, err error) // Read the FLV tag body, drop the next 4 bytes previous tag size. ReadTag(tagSize uint32) (tag []byte, err error) // Close the demuxer. Close() error }
FLV Demuxer is used to demux FLV file. Refer to @doc video_file_format_spec_v10.pdf, @page 74, @section Annex E. The FLV File Format A FLV file must consist the bellow parts:
- A FLV header, refer to @doc video_file_format_spec_v10.pdf, @page 8, @section The FLV header
- One or more tags, refer to @doc video_file_format_spec_v10.pdf, @page 9, @section FLV tags
@remark We always ignore the previous tag size.
Example ¶
package main import ( "github.com/ossrs/go-oryx-lib/flv" "io" ) func main() { // To open a flv file, or http flv stream. var r io.Reader var err error var f flv.Demuxer if f, err = flv.NewDemuxer(r); err != nil { return } defer f.Close() var version uint8 var hasVideo, hasAudio bool if version, hasVideo, hasAudio, err = f.ReadHeader(); err != nil { return } // Optional, user can check the header. _ = version _ = hasAudio _ = hasVideo var tagType flv.TagType var tagSize, timestamp uint32 if tagType, tagSize, timestamp, err = f.ReadTagHeader(); err != nil { return } var tag []byte if tag, err = f.ReadTag(tagSize); err != nil { return } // Using the FLV tag type, dts and body. // Refer to @doc video_file_format_spec_v10.pdf, @page 9, @section FLV tags _ = tagType _ = timestamp _ = tag }
Output:
type Muxer ¶
type Muxer interface { // Write the FLV header. WriteHeader(hasVideo, hasAudio bool) (err error) // Write A FLV tag. WriteTag(tagType TagType, timestamp uint32, tag []byte) (err error) // Close the muxer. Close() error }
The FLV muxer is used to write packet in FLV protocol. Refer to @doc video_file_format_spec_v10.pdf, @page 74, @section Annex E. The FLV File Format
Example ¶
package main import ( "github.com/ossrs/go-oryx-lib/flv" "io" ) func main() { // To open a flv file or http post stream. var w io.Writer var err error var f flv.Muxer if f, err = flv.NewMuxer(w); err != nil { return } defer f.Close() if err = f.WriteHeader(true, true); err != nil { return } var tagType flv.TagType var timestamp uint32 var tag []byte // Get a FLV tag to write to muxer. if err = f.WriteTag(tagType, timestamp, tag); err != nil { return } }
Output:
type TagType ¶
type TagType uint8
FLV Tag Type is the type of tag, refer to @doc video_file_format_spec_v10.pdf, @page 9, @section FLV tags
type VideoCodec ¶
type VideoCodec uint8
The video codec id. Refer to @doc video_file_format_spec_v10.pdf, @page 78, @section E.4.3 Video Tags
const ( VideoCodecForbidden VideoCodec = iota + 1 VideoCodecH263 // 2 = Sorenson H.263 VideoCodecScreen // 3 = Screen video VideoCodecOn2VP6 // 4 = On2 VP6 VideoCodecOn2VP6Alpha // 5 = On2 VP6 with alpha channel VideoCodecScreen2 // 6 = Screen video version 2 VideoCodecAVC // 7 = AVC )
func (VideoCodec) String ¶
func (v VideoCodec) String() string
type VideoFrame ¶
type VideoFrame struct { CodecID VideoCodec FrameType VideoFrameType Trait VideoFrameTrait CTS int32 Raw []byte }
func NewVideoFrame ¶ added in v0.0.4
func NewVideoFrame() *VideoFrame
type VideoFrameTrait ¶
type VideoFrameTrait uint8
The video AVC frame trait, whethere sequence header or not. Refer to @doc video_file_format_spec_v10.pdf, @page 78, @section E.4.3 Video Tags
const ( VideoFrameTraitSequenceHeader VideoFrameTrait = iota // 0 = AVC sequence header VideoFrameTraitNALU // 1 = AVC NALU VideoFrameTraitSequenceEOF // 2 = AVC end of sequence (lower level NALU sequence ender is VideoFrameTraitForbidden )
func (VideoFrameTrait) String ¶
func (v VideoFrameTrait) String() string
type VideoFrameType ¶
type VideoFrameType uint8
The video frame type. Refer to @doc video_file_format_spec_v10.pdf, @page 78, @section E.4.3 Video Tags
const ( VideoFrameTypeForbidden VideoFrameType = iota VideoFrameTypeKeyframe // 1 = key frame (for AVC, a seekable frame) VideoFrameTypeInterframe // 2 = inter frame (for AVC, a non-seekable frame) VideoFrameTypeDisposable // 3 = disposable inter frame (H.263 only) VideoFrameTypeGenerated // 4 = generated key frame (reserved for server use only) VideoFrameTypeInfo // 5 = video info/command frame )
func (VideoFrameType) String ¶
func (v VideoFrameType) String() string
type VideoPackager ¶
type VideoPackager interface { // Decode the FLV video tag to video frame. // @remark For RTMP/FLV: pts = dts + cts, where dts is timestamp in packet/tag. Decode(tag []byte) (frame *VideoFrame, err error) // Encode the video frame to FLV video tag. Encode(frame *VideoFrame) (tag []byte, err error) }
The packager used to codec the FLV video tag body. Refer to @doc video_file_format_spec_v10.pdf, @page 78, @section E.4.3 Video Tags
func NewVideoPackager ¶
func NewVideoPackager() (VideoPackager, error)