-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdesc_48.go
45 lines (40 loc) · 1.3 KB
/
desc_48.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package mpegts
import (
"fmt"
"log"
)
type Desc_48 struct {
ServiceProviderName string
ServiceName string
}
func (d *Desc_48) String() string {
return fmt.Sprintf("0x48 service_descriptor: service_provider_name= %s, service_name: %s", d.ServiceProviderName, d.ServiceName)
}
func (d *Desc_48) Encode() (desc Descriptors) {
// 8 is the length of the fixed part of the descriptor
// descriptor_tag = 0x48 : 8bit
// descriptor_length : 8bit
// service_type: 8bit
// service_provider_name_length: 8bit
// service_name_length: 8bit
desc_len := 3 + len(d.ServiceProviderName) + len(d.ServiceName) //3 is the service_type + service_provider_name_length + service_name_length
desc = make(Descriptors, desc_len+2)
desc[0] = 0x48
desc[1] = byte(desc_len)
desc[2] = 0x01
desc[3] = byte(len(d.ServiceProviderName))
copy(desc[4:], []byte(d.ServiceProviderName))
desc[4+len(d.ServiceProviderName)] = byte(len(d.ServiceName))
copy(desc[5+len(d.ServiceProviderName):], []byte(d.ServiceName))
return desc
}
func (d *Desc_48) Decode(desc Descriptors) error {
if len(desc) >= 8 && desc[0] == 0x48 {
d.ServiceProviderName = string(desc[4 : 4+desc[3]])
d.ServiceName = string(desc[5+desc[3] : 5+desc[3]+desc[4+desc[3]]])
return nil
} else {
log.Printf("Desc_48: invalid format")
return ErrDescriptorFormat
}
}