代码拉取完成,页面将自动刷新
package main
import (
"fmt"
"io/ioutil"
"os"
"gitee.com/general252/gomedia/go-codec"
"gitee.com/general252/gomedia/go-mpeg2"
)
func main() {
psfile := os.Args[1]
rfd, _ := os.Open(psfile)
defer rfd.Close()
buf, _ := ioutil.ReadAll(rfd)
fmt.Printf("read %d size\n", len(buf))
fd, err := os.OpenFile(os.Args[2], os.O_CREATE|os.O_RDWR, 0666)
if err != nil {
fmt.Println(err)
return
}
defer fd.Close()
fd2, err := os.OpenFile(os.Args[3], os.O_CREATE|os.O_RDWR, 0666)
if err != nil {
fmt.Println(err)
return
}
defer fd2.Close()
fd3, err := os.OpenFile("ps_demux_result", os.O_CREATE|os.O_RDWR, 0666)
if err != nil {
fmt.Println(err)
return
}
defer fd3.Close()
demuxer := mpeg2.NewPSDemuxer()
demuxer.OnFrame = func(frame []byte, cid mpeg2.PS_STREAM_TYPE, pts uint64, dts uint64) {
if cid == mpeg2.PS_STREAM_H264 {
if codec.H264NaluType(frame) == 9 {
return
}
//fmt.Printf("write h264 frame:%d\n", len(frame))
n, err := fd.Write(frame)
if err != nil || n != len(frame) {
fmt.Println(err)
}
} else if cid == mpeg2.PS_STREAM_AAC {
n, err := fd2.Write(frame)
if err != nil || n != len(frame) {
fmt.Println(err)
}
}
}
demuxer.OnPacket = func(pkg mpeg2.Display, decodeResult error) {
switch value := pkg.(type) {
case *mpeg2.PSPackHeader:
fd3.WriteString("--------------PS Pack Header--------------\n")
if decodeResult == nil {
value.PrettyPrint(fd3)
} else {
fd3.WriteString(fmt.Sprintf("Decode Ps Packet Failed %s\n", decodeResult.Error()))
}
case *mpeg2.System_header:
fd3.WriteString("--------------System Header--------------\n")
if decodeResult == nil {
value.PrettyPrint(fd3)
} else {
fd3.WriteString(fmt.Sprintf("Decode Ps Packet Failed %s\n", decodeResult.Error()))
}
case *mpeg2.Program_stream_map:
fd3.WriteString("--------------------PSM-------------------\n")
if decodeResult == nil {
value.PrettyPrint(fd3)
} else {
fd3.WriteString(fmt.Sprintf("Decode Ps Packet Failed %s\n", decodeResult.Error()))
}
case *mpeg2.PesPacket:
fd3.WriteString("-------------------PES--------------------\n")
if decodeResult == nil {
value.PrettyPrint(fd3)
} else {
fd3.WriteString(fmt.Sprintf("Decode Ps Packet Failed %s\n", decodeResult.Error()))
}
}
}
fmt.Println(demuxer.Input(buf))
demuxer.Flush()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。