github.com/cnotch/ipchub@v1.1.0/av/format/flv/scriptdata.go (about)

     1  // Copyright (c) 2019,CAOHONGJU All rights reserved.
     2  // Use of this source code is governed by a MIT-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package flv
     6  
     7  import (
     8  	"bytes"
     9  
    10  	"github.com/cnotch/ipchub/av/format/amf"
    11  )
    12  
    13  // 数据名称常量,如元数据
    14  const (
    15  	ScriptOnMetaData = "onMetaData"
    16  )
    17  
    18  // MetaData 常见属性名
    19  const (
    20  	MetaDataAudioCodecID    = "audiocodecid"    // Number	音频编解码器 ID
    21  	MetaDataAudioDateRate   = "audiodatarate"   // Number	音频码率,单位 kbps
    22  	MetaDataAudioDelay      = "audiodelay"      // Number	由音频编解码器引入的延时,单位秒
    23  	MetaDataAudioSampleRate = "audiosamplerate" // Number	音频采样率
    24  	MetaDataAudioSampleSize = "audiosamplesize" // Number	音频采样点尺寸
    25  	MetaDataStereo          = "stereo"          // Boolean	音频立体声标志
    26  	MetaDataCanSeekToEnd    = "canSeekToEnd"    // Boolean	指示最后一个视频帧是否是关键帧
    27  	MetaDataCreationDate    = "creationdate"    // String	创建日期与时间
    28  	MetaDataDuration        = "duration"        // Number	文件总时长,单位秒
    29  	MetaDataFileSize        = "filesize"        // Number	文件总长度,单位字节
    30  	MetaDataFrameRate       = "framerate"       // Number	视频帧率
    31  	MetaDataHeight          = "height"          // Number	视频高度,单位像素
    32  	MetaDataVideoCodecID    = "videocodecid"    // Number	视频编解码器 ID
    33  	MetaDataVideoDataRate   = "videodatarate"   // Number	视频码率,单位 kbps
    34  	MetaDataWidth           = "width"           // Number	视频宽度,单位像素
    35  )
    36  
    37  // ScriptData .
    38  type ScriptData struct {
    39  	Name  string
    40  	Value interface{}
    41  }
    42  
    43  var _ TagData = &ScriptData{}
    44  
    45  // Unmarshal .
    46  func (scriptData *ScriptData) Unmarshal(data []byte) (err error) {
    47  	buff := bytes.NewBuffer(data)
    48  
    49  	if scriptData.Name, err = amf.ReadString(buff); err != nil {
    50  		return
    51  	}
    52  
    53  	scriptData.Value, err = amf.ReadAny(buff)
    54  	return
    55  }
    56  
    57  // Marshal .
    58  func (scriptData *ScriptData) Marshal() ([]byte, error) {
    59  	buff := bytes.NewBuffer(make([]byte, 0, 1024))
    60  
    61  	if err := amf.WriteString(buff, scriptData.Name); err != nil {
    62  		return nil, err
    63  	}
    64  
    65  	if err := amf.WriteAny(buff, scriptData.Value); err != nil {
    66  		return nil, err
    67  	}
    68  
    69  	return buff.Bytes(), nil
    70  }