sdp

package module
v0.0.0-...-8bb7a4b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 5, 2020 License: MIT Imports: 4 Imported by: 1

README

sdp

这是使用Go实现的RFC4566-SDP协议。多用于SIP、WebRTC等多媒体会话场景。

主要结构体为Message,对应一条完整的SDP信息。

使用方法

在Go中引用本库:

import "gitee.com/xiaochengtech/sdp"

生成一个消息对象,解析外部收到的字符串:

sdpMsg, err := sdp.NewMessage(transferString)

将消息对象转换为字符串用于传输:

transferString := sdpMsg.String()
TODO
  • 增加完整的字段支持。
参考资料

Documentation

Index

Constants

View Source
const (
	// 会话描述标识
	Description = "application/sdp"

	// 当前版本号
	Version = "0" // 默认版本,无小版本号

	// 地址类型
	AddressTypeIPv4 = "IP4" // IPv4
	AddressTypeIPv6 = "IP6" // IPv6

	// 网络类型常量
	NetworkTypeInternet = "IN" // 因特网

	// 传输协议
	ProtocolUdp     = "UDP"      // UDP
	ProtocolRtpAvp  = "RTP/AVP"  // RTP/AVP
	ProtocolRtpSavp = "RTP/SAVP" // RTP/SAVP

	// 媒体类型
	MediaTypeAudio       = "audio"       // 音频
	MediaTypeVideo       = "video"       // 视频
	MediaTypeText        = "text"        // 文本
	MediaTypeApplication = "application" // 应用
	MediaTypeMessage     = "message"     // 消息

	// 会话层,描述字段按顺序排列
	FieldVersion     = "v" // 协议版本
	FieldBasic       = "o" // 发起者和会话标识符
	FieldSessionName = "s" // 会话名字
	FieldSessionInfo = "i" // * 会话信息
	FieldURI         = "u" // * URI标识符
	FieldEmail       = "e" // * 邮件地址
	FieldPhone       = "p" // * 电话号码
	FieldConnection  = "c" // * 连接信息,只有所有媒体层都有这个字段时,会话层才可以没有
	FieldBandwidth   = "b" // * 0个或多个带宽信息
	// 一个或多个时间描述
	FieldTimeZone      = "z" // * 时域调整
	FieldEncryptionKey = "k" // * 加密密钥
	FieldAttribute     = "a" // * 0个或多个会话属性

	// 时间描述字段
	FieldTime        = "t" // 会话有效的时间
	FieldRepeatTimes = "r" // * 0个或多个重复时间

	// 媒体描述字段,如果存在的话
	FieldMediaInfo          = "m" // 媒体名字和传输地址
	FieldMediaTitle         = "i" // * 媒体标题
	FieldMediaConnection    = "c" // * 连接信息,如果在会话层出现,则这里可以不出现
	FieldMediaBandwidth     = "b" // * 0个或多个带宽信息
	FieldMediaEncryptionKey = "k" // * 加密密钥
	FieldMediaAttribute     = "a" // * 0个或多个媒体属性
)
View Source
const CRLF = "\r\n"

分隔符

Variables

This section is empty.

Functions

This section is empty.

Types

type Basic

type Basic struct {
	Username       string // 用户名
	SessionId      string // 会话ID
	SessionVersion string // 会话版本
	NetworkType    string // 网络类型
	AddressType    string // 地址类型
	UnicastAddress string // 任务创建计算机的地址
}

拥有者或者创建者和会话标识

func (Basic) String

func (m Basic) String() string

字符串表达

type Connection

type Connection struct {
	NetworkType string // 网络类型
	AddressType string // 地址类型
	Address     string // 连接地址
}

连接数据,可以是会话级别,也可以是媒体级别

func (Connection) String

func (c Connection) String() string

字符串表达

type Media

type Media struct {
	Info          MediaInfo   // m 媒体名称和传输地址
	Title         string      // i* 媒体标题
	Connection    *Connection // c* 连接信息,如果会话层有,这里可以没有
	UnsupportLine []string    // TODO 不支持处理的行
}

媒体项

func (Media) String

func (m Media) String() (result string)

字符串表示

type MediaInfo

type MediaInfo struct {
	MediaType string // 媒体类型
	Port      string // 端口或端口列表
	Protocol  string // 传输协议
	Format    string // 其他格式,中间可以有空格
}

媒体名称和传输地址

func (MediaInfo) String

func (mi MediaInfo) String() string

字符串表达

type Message

type Message struct {
	Version        string      // v 版本号
	Basic          Basic       // o 创建者/接收者和会话标识
	SessionName    string      // s 会话名称
	Connection     *Connection // c* 连接信息
	UnsupportLines []string    // 不支持处理的行
	Media          []Media     // 媒体信息
}

完整的SDP消息

func NewMessage

func NewMessage(str string) (item Message, err error)

func (Message) String

func (m Message) String() (result string)

字符串表达

func (*Message) UpdateMediaAddress

func (m *Message) UpdateMediaAddress(mediaType string, newDomain string, newPort int)

更新指定媒体的服务器地址和端口号

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL