video-streaming - GStreamer 高品质屏幕录制和音频
问题描述
我正在尝试使用 GStreamer 从桌面屏幕和内部声音创建 RTSP 流。到目前为止,我已经将 RTSP 放在一边以创建稳定的管道并将其保存到文件中。我有:
GST_DEBUG=3 gst-launch-1.0 -v -e \
ximagesrc use-damage=false \
! videorate \
! videoconvert \
! "video/x-raw,framerate=30/1" \
! x264enc intra-refresh=true speed-preset=6 vbv-buf-capacity=0 qp-min=21 pass=qual quantizer=12 byte-stream=true key-int-max=30 bitrate=128 speed-preset=ultrafast tune=zerolatency \
! video/x-h264,profile=high \
! queue2 max-size-bytes=0 max-size-buffers=0 max-size-time=0 \
! muxer.video_0 \
pulsesrc \
! "audio/x-raw,channels=2,rate=48000" \
! queue2 max-size-bytes=0 max-size-buffers=0 max-size-time=0 \
! opusenc bitrate=128 \
! muxer.audio_0 \
mp4mux name=muxer \
! filesink location=test.mp4
我的问题是,虽然总体质量很好,但我有时会在流中出现一些滞后和“颠簸”,因此音频不是那么流畅,视频也是如此。我正在寻找使这条管道更好的方法,但找不到。很想得到任何帮助!
顺便说一句,我也用 ffmpeg 尝试过,但不幸的是它也很滞后:
ffmpeg -re -f x11grab -video_size 1920x1080 -r 60 -s 1920x1080 -an -i :0 -i watermark.png -filter_complex [1]lut=a=val*0.65[a];[0][a]overlay=(10):(main_h-overlay_h-10) -f pulse -ac 2 -ar 48000 -vn -i default -f mpegts -c:v libx264 -crf 18 -c:a copy -b:v 1200000 -bf 0 -map 0:v:0 -c:v libvpx -b:v 1000k -deadline realtime -cpu-used 4 -protocol_whitelist pipe,udp,rtp -f tee "RTSP sources..."
虽然这不在这个问题的话题范围内。
解决方案
推荐阅读
- javascript - 当我可以打印未定义的变量时,为什么会出现“无法读取未定义错误的属性”?
- javascript - 来自 XML 的 Google 地图标记
- c++ - 我正在尝试通过 openmp 和展开来加速嵌套的 for 循环,但速度很慢我想知道为什么?
- python - 如何从提取的帧中制作视频?
- angular - “'ThemeableBrowserOptions' 仅指一种类型,但在此处用作值”,在 app.module
- python - Python 应用程序和 php/WordPress 的网络服务器相同吗?
- javascript - 如何阅读文档语法?
- vim - 使用 pyvmomi 创建顶级目录失败
- php - 无论如何在PHP Codeigniter中有动态控制器
- c# - 了解部分子类