h264

package
v1.7.4 Latest Latest
Warning

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

Go to latest
Published: Jul 6, 2021 License: ISC Imports: 4 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ProfileConstrainedBaseline byte = 1
	ProfileBaseline                 = 2
	ProfileMain                     = 3
	ProfileConstrainedHigh          = 4
	ProfileHigh                     = 5

	// All values are equal to ten times the level number, except level 1b which is
	// special.
	Level1_b byte = 0
	Level1        = 10
	Level1_1      = 11
	Level1_2      = 12
	Level1_3      = 13
	Level2        = 20
	Level2_1      = 21
	Level2_2      = 22
	Level3        = 30
	Level3_1      = 31
	Level3_2      = 32
	Level4        = 40
	Level4_1      = 41
	Level4_2      = 42
	Level5        = 50
	Level5_1      = 51
	Level5_2      = 52
)
View Source
const ConstraintSet3Flag byte = 0x10

For level_idc=11 and profile_idc=0x42, 0x4D, or 0x58, the constraint set3 flag specifies if level 1b or level 1.1 is used.

Variables

View Source
var DefaultProfileLevelId = ProfileLevelId{
	Profile: ProfileConstrainedBaseline,
	Level:   Level3_1,
}

Default ProfileLevelId.

TODO: The default should really be profile Baseline and level 1 according to the spec: https://tools.ietf.org/html/rfc6184#section-8.1. In order to not break backwards compatibility with older versions of WebRTC where external codecs don"t have any parameters, use profile ConstrainedBaseline level 3_1 instead. This workaround will only be done in an interim period to allow external clients to update their code.

http://crbug/webrtc/6337.

View Source
var ProfilePatterns = []ProfilePattern{
	{0x42, NewBitPattern("x1xx0000"), ProfileConstrainedBaseline},
	{0x4D, NewBitPattern("1xxx0000"), ProfileConstrainedBaseline},
	{0x58, NewBitPattern("11xx0000"), ProfileConstrainedBaseline},
	{0x42, NewBitPattern("x0xx0000"), ProfileBaseline},
	{0x58, NewBitPattern("10xx0000"), ProfileBaseline},
	{0x4D, NewBitPattern("0x0x0000"), ProfileMain},
	{0x64, NewBitPattern("00000000"), ProfileHigh},
	{0x64, NewBitPattern("00001100"), ProfileConstrainedHigh},
}

This is from https://tools.ietf.org/html/rfc6184#section-8.1.

Functions

func GenerateProfileLevelIdForAnswer

func GenerateProfileLevelIdForAnswer(
	localSupportedParams,
	remoteOfferedParams RtpParameter,
) (str string, err error)

*

  • Generate codec parameters that will be used as answer in an SDP negotiation
  • based on local supported parameters and remote offered parameters. Both
  • local_supported_params and remote_offered_params represent sendrecv media
  • descriptions, i.e they are a mix of both encode and decode capabilities. In
  • theory, when the profile in local_supported_params represent a strict superset
  • of the profile in remote_offered_params, we could limit the profile in the
  • answer to the profile in remote_offered_params. *
  • However, to simplify the code, each supported H264 profile should be listed
  • explicitly in the list of local supported codecs, even if they are redundant.
  • Then each local codec in the list should be tested one at a time against the
  • remote codec, and only when the profiles are equal should this func be
  • called. Therefore, this func does not need to handle profile intersection,
  • and the profile of local_supported_params and remote_offered_params must be
  • equal before calling this func. The parameters that are used when
  • negotiating are the level part of profile-level-id and level-asymmetry-allowed. *
  • @returns Canonical string representation as three hex bytes of the
  • profile level id, or null if no one of the params have profile-level-id. *

func IsSameProfile

func IsSameProfile(profileLevelIdStr1, profileLevelIdStr2 string) bool

*

  • Returns true if the parameters have the same H264 profile, i.e. the same
  • H264 profile (Baseline, High, etc). *

Types

type BitPattern

type BitPattern struct {
	// contains filtered or unexported fields
}

Class for matching bit patterns such as "x1xx0000" where "x" is allowed to be either 0 or 1.

func NewBitPattern

func NewBitPattern(str string) BitPattern

type ProfileLevelId

type ProfileLevelId struct {
	Profile byte
	Level   byte
}

func NewProfileLevelId

func NewProfileLevelId(profile, level byte) ProfileLevelId

func ParseProfileLevelId

func ParseProfileLevelId(str string) (profileLevelId *ProfileLevelId)

*

  • Parse profile level id that is represented as a string of 3 hex bytes.
  • Nothing will be returned if the string is not a recognized H264 profile
  • level id. *
  • @param str - profile-level-id value as a string of 3 hex bytes.

func ParseSdpProfileLevelId

func ParseSdpProfileLevelId(profileLevelIdStr string) *ProfileLevelId

*

  • Parse profile level id that is represented as a string of 3 hex bytes
  • A default profile level id will be returned if profile level id is empty. *

func (ProfileLevelId) String

func (profileLevelId ProfileLevelId) String() string

*

  • Returns canonical string representation as three hex bytes of the profile
  • level id, or returns nothing for invalid profile level ids.

type ProfilePattern

type ProfilePattern struct {
	// contains filtered or unexported fields
}

Class for converting between profile_idc/profile_iop to Profile.

func NewProfilePattern

func NewProfilePattern(
	profileIdc byte,
	profileIop BitPattern,
	profile byte,
) ProfilePattern

type RtpParameter

type RtpParameter struct {
	PacketizationMode     int    `json:"packetization-mode,omitempty"`
	ProfileLevelId        string `json:"profile-level-id,omitempty"`
	LevelAsymmetryAllowed int    `json:"level-asymmetry-allowed,omitempty"`
}

Jump to

Keyboard shortcuts

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