Livekit ingress
jinleileiking opened this issue · comments
ingress
graph LR;
pub-->|rtmp|go-rtmp
gstreamer-->|webrtc|livekit;
subgraph ingress
go-rtmp-->|io.copy|relay-->|flv localhost:9090|gstreamer
end
graph TD;
runService-->svc.Run-->Q[req := <-s.rtmpPublishRequests]-->handleNewRTMPPublisher-->launchHandler-->runHandler-->HandleIngress-->h.buildPipeline--> media.New-->NewInput-->NewHTTPRelaySource-->X["gst.NewElementWithName(appsrc, FlvAppSource)"]-->QQ["gst.NewElement(decodebin3)"]
runService-->rtmp.NewRTMPServer-->Z["rtmpsrv.Start(conf, svc.HandleRTMPPublishRequest)"].->h.OnPublishCallback-->svc.HandleRTMPPublishRequest-->T[s.rtmpPublishRequests <- r]-->Q
本地编译
- config.yaml是k8s里的ingress部分,拿过来就行
usr/local/bin
执行ln /home/jinlei/gocodes/src/ingress/main ./ingress -s
GST_DEBUG="*:4" ./main -config=config.yaml
gst调试自己的编码器
- gst库在,直接挪过去就好使
/usr/lib/x86_64-linux-gnu/gstreamer-1.0
看了下代码, 感觉需要把gst的x264enc Element编码部分替换成ffmpeg lib库就可以了。
不知道gst的x264enc 这1个element是否可被两个替换。
主要改动在pkg/media/output.go
这块
原流程:
graph LR;
videoconvert-->videoscale-->x264enc-->capsfilter--> queue --> IngressAppsink;
graph LR;
videoconvert-->videoscale-->FFmpegAppsink-->|ffmpeg|FFmpegAppsrc --> queue --> IngressAppsink;
,NewVideoOutput这块是创建了gst的x264enc Element。这块需要替换成自己的gst sink,然后用ffmpeg处理后的数据当作 appsrc给ingress 的 appsink