在ubuntu上运行gstreamer通过RTSP发送视频太慢

在ubuntu上运行gstreamer通过RTSP发送视频太慢,gstreamer,Gstreamer,我正在尝试从我的ubuntu机器上安装的网络摄像头中传输实时视频 我首先检查了gst rtsp服务器代码,并按照以下步骤操作: $ git clone git://anongit.freedesktop.org/gstreamer/gst-rtsp-server $ cd gst-rtsp-server $ git checkout 1.4 $ ./autogen.sh $ make $ sudo make install 然后我尝试发送测试模式图像 ./test-launch '( vide

我正在尝试从我的ubuntu机器上安装的网络摄像头中传输实时视频

我首先检查了gst rtsp服务器代码,并按照以下步骤操作:

$ git clone git://anongit.freedesktop.org/gstreamer/gst-rtsp-server
$ cd gst-rtsp-server
$ git checkout 1.4
$ ./autogen.sh
$ make
$ sudo make install
然后我尝试发送测试模式图像

./test-launch '( videotestsrc ! x264enc ! rtph264pay name=pay0 pt=96 )'
stream ready at rtsp://127.0.0.1:8554/test
客户端可以看到工作模式

然后我尝试用以下命令显示网络摄像头

./test-launch '( v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480,framerate=30/1 ! videoconvert ! x264enc ! rtph264pay name=pay0 pt=96 )'
这工作正常,但延迟约为3秒

有没有办法减少延迟,让它看起来更像实时的

从gst设备监视器中,我看到以下消息:

$gst-device-monitor-1.0

Probing devices...


Device found:

 Analog Stereo: BUFFALO BSWHD06M USB Camera
    class : Audio/Source
    caps  : audio/x-raw, format=(string){ S16LE, S16BE, F32LE, F32BE, S32LE, S32BE, S24LE, S24BE, S24_32LE, S24_32BE, U8 }, layout=(string)interleaved, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
            audio/x-alaw, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
            audio/x-mulaw, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
    properties:
        alsa.resolution_bits = 16
        device.api = alsa
        device.class = sound
        alsa.class = generic
        alsa.subclass = generic-mix
        alsa.name = "USB\ Audio"
        alsa.id = "USB\ Audio"
        alsa.subdevice = 0
        alsa.subdevice_name = "subdevice\ \#0"
        alsa.device = 0
        alsa.card = 1
        alsa.card_name = "BUFFALO\ BSWHD06M\ USB\ Camera"
        alsa.long_card_name = "KYE\ Systems\ Corp.\ BUFFALO\ BSWHD06M\ USB\ Camera\ at\ usb-0000:00:14.0-10\,\ high\ spee"
        alsa.driver_name = snd_usb_audio
        device.bus_path = pci-0000:00:14.0-usb-0:10:1.2
        sysfs.path = /devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.2/sound/card1
        udev.id = usb-KYE_Systems_Corp._BUFFALO_BSWHD06M_USB_Camera-02
        device.bus = usb
        device.vendor.id = 0411
        device.vendor.name = "BUFFALO\ INC.\ \(formerly\ MelCo.\,\ Inc.\)"
        device.product.id = 0260
        device.product.name = "BUFFALO\ BSWHD06M\ USB\ Camera\015"
        device.serial = KYE_Systems_Corp._BUFFALO_BSWHD06M_USB_Camera
        device.form_factor = webcam
        device.string = front:1
        device.buffering.buffer_size = 352800
        device.buffering.fragment_size = 176400
        device.access_mode = mmap+timer
        device.profile.name = analog-stereo
        device.profile.description = "Analog\ Stereo"
        device.description = "BUFFALO\ BSWHD06M\ USB\ Camera\015\ Analog\ Stereo"
        module-udev-detect.discovered = 1
        device.icon_name = camera-web-usb
        is-default = true
    gst-launch-1.0 pulsesrc device=alsa_input.usb-KYE_Systems_Corp._BUFFALO_BSWHD06M_USB_Camera-02.analog-stereo ! ...


Device found:

    name  : Monitor of Built-in Audio Digital Stereo (HDMI 3)
    class : Audio/Source
    caps  : audio/x-raw, format=(string){ S16LE, S16BE, F32LE, F32BE, S32LE, S32BE, S24LE, S24BE, S24_32LE, S24_32BE, U8 }, layout=(string)interleaved, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
            audio/x-alaw, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
            audio/x-mulaw, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
    properties:
        device.description = "Monitor\ of\ Built-in\ Audio\ Digital\ Stereo\ \(HDMI\ 3\)"
        device.class = monitor
        alsa.card = 0
        alsa.card_name = "HDA\ Intel\ PCH"
        alsa.long_card_name = "HDA\ Intel\ PCH\ at\ 0x51130000\ irq\ 136"
        alsa.driver_name = snd_hda_intel
        device.bus_path = pci-0000:00:1f.3
        sysfs.path = /devices/pci0000:00/0000:00:1f.3/sound/card0
        device.bus = pci
        device.vendor.id = 8086
        device.vendor.name = "Intel\ Corporation"
        device.product.id = a348
        device.product.name = "Cannon\ Lake\ PCH\ cAVS"
        device.form_factor = internal
        device.string = 0
        module-udev-detect.discovered = 1
        device.icon_name = audio-card-pci
        is-default = false
    gst-launch-1.0 pulsesrc device=alsa_output.pci-0000_00_1f.3.hdmi-stereo-extra2.monitor ! ...


Device found:

    name  : Built-in Audio Digital Stereo (HDMI 3)
    class : Audio/Sink
    caps  : audio/x-raw, format=(string){ S16LE, S16BE, F32LE, F32BE, S32LE, S32BE, S24LE, S24BE, S24_32LE, S24_32BE, U8 }, layout=(string)interleaved, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
            audio/x-alaw, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
            audio/x-mulaw, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
    properties:
        alsa.resolution_bits = 16
        device.api = alsa
        device.class = sound
        alsa.class = generic
        alsa.subclass = generic-mix
        alsa.name = "HDMI\ 2"
        alsa.id = "HDMI\ 2"
        alsa.subdevice = 0
        alsa.subdevice_name = "subdevice\ \#0"
        alsa.device = 8
        alsa.card = 0
        alsa.card_name = "HDA\ Intel\ PCH"
        alsa.long_card_name = "HDA\ Intel\ PCH\ at\ 0x51130000\ irq\ 136"
        alsa.driver_name = snd_hda_intel
        device.bus_path = pci-0000:00:1f.3
        sysfs.path = /devices/pci0000:00/0000:00:1f.3/sound/card0
        device.bus = pci
        device.vendor.id = 8086
        device.vendor.name = "Intel\ Corporation"
        device.product.id = a348
        device.product.name = "Cannon\ Lake\ PCH\ cAVS"
        device.form_factor = internal
        device.string = "hdmi:0\,2"
        device.buffering.buffer_size = 352800
        device.buffering.fragment_size = 176400
        device.access_mode = mmap+timer
        device.profile.name = hdmi-stereo-extra2
        device.profile.description = "Digital\ Stereo\ \(HDMI\ 3\)"
        device.description = "Built-in\ Audio\ Digital\ Stereo\ \(HDMI\ 3\)"
        module-udev-detect.discovered = 1
        device.icon_name = audio-card-pci
        is-default = true
    gst-launch-1.0 ... ! pulsesink device=alsa_output.pci-0000_00_1f.3.hdmi-stereo-extra2


Device found:

    name  : BUFFALO BSWHD06M USB Camera
    class : Video/Source
    caps  : video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)8/1;
            video/x-raw, format=(string)YUY2, width=(int)800, height=(int)600, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 15/1, 8/1 };
            video/x-raw, format=(string)YUY2, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 20/1, 15/1, 8/1 };
            video/x-raw, format=(string)YUY2, width=(int)640, height=(int)360, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 20/1, 15/1, 8/1 };
            video/x-raw, format=(string)YUY2, width=(int)352, height=(int)288, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 20/1, 15/1, 8/1 };
            video/x-raw, format=(string)YUY2, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 20/1, 15/1, 8/1 };
            video/x-raw, format=(string)YUY2, width=(int)176, height=(int)144, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 20/1, 15/1, 8/1 };
            video/x-raw, format=(string)YUY2, width=(int)160, height=(int)120, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 20/1, 15/1, 8/1 };
            image/jpeg, width=(int)1280, height=(int)960, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)12/1;
            image/jpeg, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 16/1 };
            image/jpeg, width=(int)800, height=(int)600, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 16/1 };
            image/jpeg, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 16/1 };
            image/jpeg, width=(int)640, height=(int)360, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 20/1, 15/1, 8/1 };
            image/jpeg, width=(int)352, height=(int)288, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1 };
            image/jpeg, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 20/1, 15/1, 8/1 };
            image/jpeg, width=(int)176, height=(int)144, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 20/1, 15/1, 8/1 };
            image/jpeg, width=(int)160, height=(int)120, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 16/1 };
    properties:
        udev-probed = true
        device.bus_path = pci-0000:00:14.0-usb-0:10:1.0
        sysfs.path = /sys/devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.0/video4linux/video0
        device.bus = usb
        device.subsystem = video4linux
        device.vendor.id = 0411
        device.vendor.name = "KYE\\x20Systems\\x20Corp."
        device.product.id = 0260
        device.product.name = "BUFFALO\ BSWHD06M\ USB\ Camera"
        device.serial = KYE_Systems_Corp._BUFFALO_BSWHD06M_USB_Camera
        device.capabilities = :capture:
        device.api = v4l2
        device.path = /dev/video0
        v4l2.device.driver = uvcvideo
        v4l2.device.card = "BUFFALO\ BSWHD06M\ USB\ Camera\015\012:\ "
        v4l2.device.bus_info = usb-0000:00:14.0-10
        v4l2.device.version = 329746 (0x00050812)
        v4l2.device.capabilities = 2225078273 (0x84a00001)
        v4l2.device.device_caps = 69206017 (0x04200001)
    gst-launch-1.0 v4l2src ! ...

您不仅仅是在播放流,实际上是在重新编码数据。这种编码引入了延迟。对于
x264enc
元素,使用
tune=zerolatency
选项减少延迟。不过这是以牺牲视频质量为代价的。

谢谢。我也试过了,但是速度还是很慢。