如何读取 Gstreamer 中的流大小?
How to read a stream size in Gstreamer?
1。上下文
我有一个非常简单的管道:
filesrc location=foo.wav ! decodebin ! ENCODER ! MUXER ! filesink location=bar.whatever
ENCODER
是任何 gstreamer
编码器和 MUXER
,任何合适的多路复用器。管道正在工作。为了简单起见,假设只有一个音频流来自decodebin
。
2。问题
现在,
- 如何在
decodebin
(即原始 PCM 大小)之后立即查询总音频流大小 (以字节为单位 )?
- 如何在
ENCODER
(即原始压缩大小)之后查询总音频流大小字节?
3。我尝试了什么
我正在使用 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 倍)。
您可以尝试使用焊盘探针。
在要计算字节数的焊盘上为缓冲区和缓冲区列表添加焊盘探测。
1。上下文
我有一个非常简单的管道:
filesrc location=foo.wav ! decodebin ! ENCODER ! MUXER ! filesink location=bar.whatever
ENCODER
是任何 gstreamer
编码器和 MUXER
,任何合适的多路复用器。管道正在工作。为了简单起见,假设只有一个音频流来自decodebin
。
2。问题
现在,
- 如何在
decodebin
(即原始 PCM 大小)之后立即查询总音频流大小 (以字节为单位 )? - 如何在
ENCODER
(即原始压缩大小)之后查询总音频流大小字节?
3。我尝试了什么
我正在使用 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 倍)。
您可以尝试使用焊盘探针。
在要计算字节数的焊盘上为缓冲区和缓冲区列表添加焊盘探测。