获取rtsp流,保存mp4文件。生成的文件不能显示视频,但能显示时间。请问这是怎么回事?代码如下
moonfdd opened this issue · comments
package main
import (
"fmt"
"os"
"time"
"github.com/deepch/vdk/format/mp4"
"github.com/deepch/vdk/format/rtspv2"
)
func main() {
c, err := rtspv2.Dial(rtspv2.RTSPClientOptions{URL: "rtsp://admin:DSYmaster@172.16.11.191:554/LiveMedia/ch1/Media2", DisableAudio: true, DialTimeout: 3 * time.Second, ReadWriteTimeout: 3 * time.Second, Debug: false})
if err != nil {
fmt.Println("失败", err)
return
}
defer c.Close()
fmt.Println("连接成功")
fmt.Println(c.CodecData[0].Type())
f, err2 := os.Create("./test.mp4")
if err2 != nil {
fmt.Println("创建文件失败", err2)
return
}
defer f.Close()
m := mp4.NewMuxer(f)
err = m.WriteHeader(c.CodecData)
if err != nil {
fmt.Println("WriteHeader失败", err)
return
} else {
fmt.Println("WriteHeader成功")
}
i := 0
for {
select {
case signals := <-c.Signals:
fmt.Println("信号:", signals)
switch signals {
case rtspv2.SignalCodecUpdate:
fmt.Println("开始")
case rtspv2.SignalStreamRTPStop:
return
}
case packetAV := <-c.OutgoingPacketQueue:
fmt.Println("数据:", packetAV.IsKeyFrame, i)
i++
err = m.WritePacket(*packetAV)
if err != nil {
fmt.Println("WritePacket失败", err)
return
} else {
fmt.Println(packetAV.CompositionTime)
fmt.Println(packetAV.Duration)
fmt.Println(packetAV.Idx)
fmt.Println(packetAV.IsKeyFrame)
fmt.Println(packetAV.Time)
fmt.Println("WritePacket成功", len(packetAV.Data))
}
}
if i >= 251 {
break
}
}
m.WriteTrailer()
fmt.Println("WriteTrailer成功")
fmt.Println("结束")
fmt.Println("")
}
用vlc播放视频文件,看不到画面,但能看到时间。看文件大小,明显不对。是不是代码写得有问题?谢谢了。