linux - Gstreamer - opus caps 解析错误,有人知道如何解决吗?

标签 linux bash gstreamer python-gstreamer

我的解析有什么问题?它无法正确解析 opus 大写字母(但不是 speex)并导致它无法正常工作任何人都知道,我必须在其中添加更多\或/或 "或 ' 符号以使其成为有效的大写字母?

$ gst-launch-0.10 -v gstrtpbin name=rtpbin latency=100 udpsrc caps="application/x-rtp, media=(string)audio, clock-rate=(int)48000, encoding-name=(string)X-GST-OPUS-DRAFT-SPITTKA-00, caps=(string)\"audio/x-opus\\,\\ multistream\\=\\(boolean\\)false\\,\\ streamheader\\=\\(buffer\\)\\<\\ 4f707573486561640101000080bb0000000000\\,\\ 4f707573546167731e000000456e636f6465642077697468204753747265616d6572204f707573656e63010000001a0000004445534352495054494f4e3d617564696f74657374207761766501\\ \\>\", ssrc=(uint)3090172512, payload=(int)96, clock-base=(uint)4268257583, seqnum-base=(uint)10001" port=5002 ! rtpbin.recv_rtp_sink_1 rtpbin. ! rtpopusdepay ! opusdec ! audioconvert ! audioresample ! alsasink device=2 name=uudpsink0 udpsrc port=5003 ! rtpbin.recv_rtcp_sink_1 rtpbin.send_rtcp_src_1 ! udpsink port=5007 host=%s sync=false async=false

(gst-plugin-scanner:25672): GStreamer-WARNING **: Failed to load plugin '/usr/lib/gstreamer-0.10/libgstsimsyn.so': /usr/lib/gstreamer-0.10/libgstsimsyn.so: undefined symbol: gst_controller_sync_values

(gst-plugin-scanner:25672): GStreamer-WARNING **: Failed to load plugin '/usr/lib/gstreamer-0.10/libgstaudiodelay.so': /usr/lib/gstreamer-0.10/libgstaudiodelay.so: undefined symbol: gst_base_transform_set_gap_aware

(gst-plugin-scanner:25672): GStreamer-WARNING **: Failed to load plugin '/usr/lib/gstreamer-0.10/libgstbml.so': /usr/lib/gstreamer-0.10/libgstbml.so: undefined symbol: gst_base_src_set_format
WARNING: erroneous pipeline: could not set property "caps" in element "udpsrc0" to "application/x-rtp, media=(string)audio, clock-rate=(int)48000, encoding-name=(string)X-GST-OPUS-DRAFT-SPITTKA-00, caps=(string)"audio/x-opus\,\\ multistream\=\(boolean\)false\,\\ streamheader\=\(buffer\)\<\\ 4f707573486561640101000080bb0000000000\,\\ 4f707573546167731e000000456e636f6465642077697468204753747265616d6572204f707573656e63010000001a0000004445534352495054494f4e3d617564696f74657374207761766501\\ \>", ssrc=(uint)3090172512, payload=(int)96, clock-base=(uint)4268257583, seqnum-base=(uint)10001"

最佳答案

我认为不需要特殊的转义。如果您的管道是正确的,那么这应该可以工作:

gst-launch-0.10 -v gstrtpbin name=rtpbin latency=100 udpsrc caps="application/x-rtp, media=(string)audio, clock-rate=(int)48000, encoding-name=(string)X-GST-OPUS-DRAFT-SPITTKA-00, caps=(string)audio/x-opus, multistream=(boolean)false, streamheader=(buffer)<4f707573486561640101000080bb0000000000,4f707573546167731e000000456e636f6465642077697468204753747265616d6572204f707573656e63010000001a0000004445534352495054494f4e3d617564696f74657374207761766501>, ssrc=(uint)3090172512, payload=(int)96, clock-base=(uint)4268257583, seqnum-base=(uint)10001" port=5002 ! rtpbin.recv_rtp_sink_1 rtpbin. ! rtpopusdepay ! opusdec ! audioconvert ! audioresample ! alsasink device=2 name=uudpsink0 udpsrc port=5003 ! rtpbin.recv_rtcp_sink_1 rtpbin.send_rtcp_src_1 ! udpsink port=5007 host=%s sync=false async=false

如果您需要处理 bash 可能解释的特殊字符,请将 caps="..." 更改为 caps='...'

这是一个笨拙的 python 版本:

import subprocess                                                                                                                                                                                  

args=[  'gst-launch-0.10',
        '-v',
        'gstrtpbin',
        'name=rtpbin',
        'latency=100',
        'udpsrc',
        'caps="application/x-rtp, media=(string)audio, clock-rate=(int)48000, encoding-name=(string)X-GST-OPUS-DRAFT-SPITTKA-00, caps=(string)audio/x-opus, multistream=(boolean)false, streamheader=(buffer)<4f707573486561640101000080bb0000000000,4f707573546167731e000000456e636f6465642077697468204753747265616d6572204f707573656e63010000001a0000004445534352495054494f4e3d617564696f74657374207761766501>, ssrc=(uint)3090172512, payload=(int)96, clock-base=(uint)4268257583, seqnum-base=(uint)10001"',
        'port=5002',
        '!',
        'rtpbin.recv_rtp_sink_1',
        'rtpbin.',
        '!',
        'rtpopusdepay',
        '!',
        'opusdec',
        '!',
        'audioconvert',
        '!',
        'audioresample',
        '!',
        'alsasink',
        'device=2',
        'name=uudpsink0',
        'udpsrc',
        'port=5003',
        '!',
        'rtpbin.recv_rtcp_sink_1',
        'rtpbin.send_rtcp_src_1',
        '!',
        'udpsink',
        'port=5007',
        'host=%s',
        'sync=false',
        'async=false',

        ]

child = subprocess.Popen(args, stdout=subprocess.PIPE)
streamdata = child.communicate()[0] # streamdata will contain output of gst-launch-0.10
rc = child.returncode # rc will contain the returncode of gst-launch-0.10

print streamdata
print "\nprocess returned %d" %(rc)

我认为你最好为 gstreamer 找到一个好的 python 模块,而不是使用子进程或类似的东西。

希望这对您有所帮助!

关于linux - Gstreamer - opus caps 解析错误,有人知道如何解决吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23356609/

相关文章:

python - GStreamer 如何从流中提取视频帧?

python - 在 python 中从 opencv 写入 Gstreamer 管道

linux - 如何grep精准匹配

linux - 我的 Mac 终端中的名称已关闭

bash - 为什么要避免子外壳?

linux - 在linux中回显路径有什么作用?

c++ - Gstreamer 视频流和接收

java - 屏蔽控制台输入的密码: Java with nohup command

linux - 将帧缓冲区映射到 X 窗口

c - 简单的字符计数程序表现异常