1. 背景
我有一个非常简单的管道:
filesrc location=foo.wav ! decodebin ! ENCODER ! MUXER ! filesink location=bar.whatever
ENCODER
作为任何gstreamer
编码器和任何MUXER
合适的复用器。管道正在工作。为简单起见,假设只有一个音频流来自decodebin
.
2.问题
现在,
- 如何在之后(即原始 PCM 大小)查询总音频流大小(以字节为单位)?
decodebin
- 如何在之后(即原始压缩大小)查询总音频流大小(以字节为单位)?
ENCODER
3. 我试过的
我正在使用带有 GI 的 Python。我已经尝试使用该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()
然而,这真的很慢(比使用 慢 20 倍filesink
)。