1

假设我有这个元组:

(<GstStructure at 0xb270e080>, ' audio/x-raw, rate=(int)44100, layout=(string)interleaved, format=(string){ S8, S16LE, S32LE, S24LE, F32LE, F64LE }, channels=(int)[ 1, 2147483647 ]; audio/x-raw, rate=(int)[ 1, 2147483647 ], channels=(int)1, format=(string)F32LE, layout=(string)interleaved; audio/x-raw, rate=(int)[ 1, 2147483647 ], layout=(string)interleaved, format=(string){ S8\x91\x00\x00\x00@\x00p\xb2@\x00p\xb2LE, S24LE, F32LE, F64LE }, channels=(int)[ 1, 2147483647 ]')

我想得到率,但元组真的只有两个元素。我怎样才能得到利率?

4

4 回答 4

2
your_tuple[1].split(', ')[1].split('=(int)')[1]

你得到了 your_tuple 的第二个元素。然后你把它分成','这给你:

[' audio/x-raw', 'rate=(int)44100', 'layout=(string)interleaved', 'format=(string){ S8', 'S16LE', 'S32LE', 'S24LE', 'F32LE', 'F64LE }', 'channels=(int)[ 1', '2147483647 ]; audio/x-raw', 'rate=(int)[ 1', '2147483647 ]', 'channels=(int)1', 'format=(string)F32LE', 'layout=(string)interleaved; audio/x-raw', 'rate=(int)[ 1', '2147483647 ]', 'layout=(string)interleaved', 'format=(string){ S8\x91\x00\x00\x00@\x00p\xb2@\x00p\xb2LE', 'S24LE', 'F32LE', 'F64LE }', 'channels=(int)[ 1', '2147483647 ]']

在第二个元素上,您对 '=(int)' 进行另一个拆分,这就是第二个元素。

这是'44100'

于 2013-07-18T14:09:59.117 回答
1

让我们称您的元组为“元组”;那么你可以做这样的事情:

strings = tuple[1].split(', ') //Splitting the second item base on the ', ' delimiter
rate = strings[1][10:] //The number you want starts at the 10th character of the second object in the array

如果您的流的格式发生变化,您将不得不以不同的方式对其进行解析,您还可以通过数组执行 for 循环并搜索“rate=(int)”。

于 2013-07-18T14:13:47.963 回答
1

元组的第二个值似乎是元组的第一个值提供的 GStructure 对象的字符串表示形式。

您可以如上所述解析字符串以检索速率值(尽管可能有 2 个可能的值:44100或者[ 1, 2147483647 ],我们假设这44100是您想要的值)。

如果您想使用 GStructure 实例,根据GStreamer GStructure的文档,您可以使用以下get_value()方法:

your_tuple[0].get_value("rate")

你能试一试吗?

于 2013-07-18T14:34:46.670 回答
0

使用正则表达式

t = ('<GstStructure at 0xb270e080>', ' audio/x-raw, rate=(int)44100, layout=(string)interleaved, format=(string){ S8, S16LE, S32LE, S24LE, F32LE, F64LE }, channels=(int)[ 1, 2147483647 ]; audio/x-raw, rate=(int)[ 1, 2147483647 ], channels=(int)1, format=(string)F32LE, layout=(string)interleaved; audio/x-raw, rate=(int)[ 1, 2147483647 ], layout=(string)interleaved, format=(string){ S8\x91\x00\x00\x00@\x00p\xb2@\x00p\xb2LE, S24LE, F32LE, F64LE }, channels=(int)[ 1, 2147483647 ]')
print re.findall('rate=\(int\)\[? ?(\d+),? ?(\d+)? ?\]?', t[1])

它会打印一个包含 rate=(int) 的所有数字的列表。这个正则表达式看起来真的很草率,但它完成了工作。

[('44100', ''), ('1', '2147483647'), ('1', '2147483647')]
于 2013-07-18T14:38:20.573 回答