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 ]')

レートを取得したいのですが、タプルには実際には 2 つの要素しかありません。どうすればレートを取得できますか?

4

4 に答える 4

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

your_tuple の 2 番目の要素を取得します。次に、それを ', ' で分割すると、次のようになります。

[' 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 ]']

2 番目の要素では、'=(int)' で別の分割を行います。これが 2 番目の要素です。

これは「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

タプルの 2 番目の値は、タプルの 1 番目の値によって提供される GStructure オブジェクトの文字列表現のようです。

上記のように文字列を解析してレート値を取得できます (ただし、2 つの可能な値が可能です:44100または[ 1, 2147483647 ]44100

GStructure インスタンスを使用する場合は、GStreamer GStructureget_value()のドキュメントに従って、次のメソッドを使用できます。

your_tuple[0].get_value("rate")

試してみませんか?

于 2013-07-18T14:34:46.670 に答える