如何在 GStreamer 中在同一台计算机上工作的 2 个 python 脚本之间流式传输音频?

问题描述

到目前为止,我有 2 段代码可以正常工作。代码 A (FileRecord) 创建一个管道并将它从麦克风听到的任何内容写入名为 file.ogg 的 .ogg 文件。代码 B (FilePlayer) 必须在用户停止手动 (Ctrl + C) 脚本 A 的执行后启动,并在执行期间记录的任何记录器 (file.ogg) 中在脉冲接收器(用户的耳机)中播放。

我的目标是让两段代码同时工作,并在代码 A 记录的同时播放代码 B 中的文件。

代码 A(文件记录)

from time import sleep
import gi
gi.require_version("Gst","1.0")
from gi.repository import Gst
from gi.repository import GLib
import signal


signal.signal(signal.SIGTSTP,signal.SIG_IGN)       #When Ctrl + Z is pressed file is not playable (this command ignores Ctrl + Z)
print("In order to stop press: Ctrl C.")


Gst.init()
main_loop = GLib.MainLoop()
main_loop_thread = Thread(target = main_loop.run)
main_loop_thread.start()
#buffer = gst_buffer_new ()

pipeline = Gst.parse_launch('autoaudiosrc ! audioconvert ! tee name="source" ! queue ! vorbisenc ! oggmux ! filesink location=file.ogg')

pipeline.set_state(Gst.State.PLAYING)

try:
    while True:
        sleep(0.1)

except KeyboardInterrupt:
    pass

pipeline.set_state(Gst.State.NULL)
main_loop.quit()
main_loop_thread.join()

代码 B(文件播放器)

from time import sleep
import gi
gi.require_version("Gst","1.0")
from gi.repository import Gst
from gi.repository import GLib
import signal


Gst.init()
main_loop = GLib.MainLoop()
main_loop_thread = Thread(target = main_loop.run)
main_loop_thread.start()

pipeline = Gst.parse_launch('filesrc location=file.ogg ! decodebin ! pulsesink')

pipeline.set_state(Gst.State.PLAYING)

try:
    while True:
        sleep(0.1)

except KeyboardInterrupt:
    pass

pipeline.set_state(Gst.State.NULL)
main_loop.quit()
main_loop_thread.join()

我不知道如何实现声音流。请帮帮我!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)