Documentation ¶
Index ¶
- Constants
- Variables
- func CalcM3U8Duration(content []byte) (durationSec float64, err error)
- func RemoveAll(path string) error
- func SetUseMemoryAsDiskFlag(flag bool)
- func SplitFragment2TSPackets(content []byte) (ret [][]byte, err error)
- type Fragment
- type Muxer
- type MuxerConfig
- type MuxerEventObserver
- type MuxerObserver
- type ReadFileFallback
- type Server
- type Streamer
- type StreamerObserver
Constants ¶
View Source
const ( CleanupModeNever = 0 CleanupModeInTheEnd = 1 CleanupModeASAP = 2 CleanupOnlyIndex = 3 )
Variables ¶
View Source
var ErrHLS = errors.New("lal.hls: fxxk")
Functions ¶
func CalcM3U8Duration ¶
content 传入m3u8文件内容
@return durationSec m3u8中所有ts的时间总和。注意,使用的是m3u8文件中描述的ts时间,而不是读取ts文件中实际音视频数据的时间。
func SetUseMemoryAsDiskFlag ¶ added in v0.19.12
func SetUseMemoryAsDiskFlag(flag bool)
func SplitFragment2TSPackets ¶
Types ¶
type Muxer ¶
type Muxer struct { UniqueKey string // contains filtered or unexported fields }
func NewMuxer ¶
func NewMuxer(streamName string, config *MuxerConfig, observer MuxerObserver, eventObserver MuxerEventObserver) *Muxer
@param observer 可以为nil,如果不为nil,TS流将回调给上层 eventObserver 可以为nil,主要用于触发新增 frag 和关闭 frag 事件给外部
func (*Muxer) FeedRTMPMessage ¶
@param msg 函数调用结束后,内部不持有msg中的内存块
type MuxerConfig ¶
type MuxerConfig struct { Enable bool `json:"enable"` // 如果false,说明hls功能没开,也即不写文件,但是MuxerObserver依然会回调 OutPath string `json:"out_path"` // m3u8和ts文件的输出根目录,注意,末尾需以'/'结束 FragmentDurationMS int `json:"fragment_duration_ms"` FragmentNum int `json:"fragment_num"` // hls文件清理模式: // 0 不删除m3u8+ts文件,可用于录制等场景 // 1 在输入流结束后删除m3u8+ts文件 // 注意,确切的删除时间是推流结束后的<fragment_duration_ms> * <fragment_num> * 2的时间点 // 推迟一小段时间删除,是为了避免输入流刚结束,hls的拉流端还没有拉取完 // 2 推流过程中,持续删除过期的ts文件,只保留最近的<fragment_num> * 2个左右的ts文件 // TODO chef: lalserver的模式1的逻辑是在上层做的,应该重构到hls模块中 CleanupMode int `json:"cleanup_mode"` }
type MuxerEventObserver ¶ added in v0.19.3
type MuxerEventObserver interface { // rightNow 记录发生时间 // ts 新建立fragment时的时间戳,毫秒 * 90 // id fragment的自增序号 // discont 不连续标志,会在m3u8文件的fragment前增加`#EXT-X-DISCONTINUITY` // fileName fragment 文件名 // streamName 流名称 OnOpenFragment(rightNow time.Time, ts uint64, id int, discont bool, fileName string, streamName string) // id fragment的自增序号 // duration 当前fragment中数据的时长,单位秒 // streamName 流名称 OnCloseFragment(id int, duration float64, streamName string) }
type MuxerObserver ¶
type ReadFileFallback ¶ added in v0.19.9
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
func (*Server) SetReadFileFallback ¶ added in v0.19.9
func (s *Server) SetReadFileFallback(fallback ReadFileFallback)
type Streamer ¶
type Streamer struct { UniqueKey string // contains filtered or unexported fields }
func NewStreamer ¶
func NewStreamer(observer StreamerObserver) *Streamer
func (*Streamer) AudioCacheEmpty ¶
func (*Streamer) AudioSeqHeaderCached ¶
func (*Streamer) FeedRTMPMessage ¶
msg msg.Payload 调用结束后,函数内部不会持有这块内存
TODO chef: 可以考虑数据有问题时,返回给上层,直接主动关闭输入流的连接
func (*Streamer) FlushAudio ¶
func (s *Streamer) FlushAudio()
吐出音频数据的三种情况: 1. 收到音频或视频时,音频缓存队列已达到一定长度 2. 打开一个新的TS文件切片时 3. 输入流关闭时
func (*Streamer) VideoSeqHeaderCached ¶
type StreamerObserver ¶
Click to show internal directories.
Click to hide internal directories.