我有一个非常简单的管道:
filesrc location=foo.wav ! decodebin ! ENCODER ! MUXER ! filesink location=bar.whatever
ENCODER
是任何gstreamer
编码器和MUXER
,无论适当的多路复用器。管道正在运转。为简单起见,假设只有一个音频流来自decodebin
。
现在,
decodebin
之后(即原始PCM大小)查询总音频流大小以字节为单位?ENCODER
之后(即原始压缩尺寸)查询总音频流以字节为单位?我正在使用Python和GI。我已尝试使用appsink
元素,但无效,使用以下管道:
filesrc location=foo.wav ! decodebin ! ENCODER ! tee name=tee \
tee. ! queue ! MUXER ! filesink location=bar.whatever \
tee. ! queue ! appsink
appsink
的相关部分如下:
counter = 0
appsink = Gst.ElementFactory.make('appsink', None)
appsink.set_property('emit-signals', True)
appsink.set_property('sync', False)
appsink.connect('new-sample', on_new_buffer)
appsink.connect('new-preroll', on_new_preroll)
def on_new_buffer(sample):
counter += sample.emit('pull-sample').get_buffer().get_size()
def on_new_preroll(sample):
counter += sample.emit('pull-preroll').get_buffer().get_size()
然而,这真的很慢(比使用filesink
慢20倍。)
答案 0 :(得分:1)
您可以尝试使用垫探针。
在要计算字节数的焊盘上添加缓冲区和缓冲区列表的焊盘探针。