首页 > 解决方案 > 带有 Gstreamer 管道的 Kinesis 直播流作为带有 sudo 的 python 子进程:“没有这样的元素或插件‘kvssink’”

问题描述

我已经测试了Amazon Kinesis 文档给出的示例:

$ gst-launch-1.0 rtspsrc location="rtsp://YourCameraRtspUrl" short-header=TRUE ! rtph264depay ! video/x-h264, format=avc,alignment=au ! kvssink stream-name="YourStreamName" storage-size=512 access-key="YourAccessKey" secret-key="YourSecretKey" aws-region="YourAWSRegion"

当我在终端中运行它时,这很好用,但是当我尝试将它作为子进程集成到 python 程序中时,它会抛出错误No such element or plugin 'kvssink'。该程序需要作为 sudo 运行,因为它是一个更大的项目,有多个其他位置需要更高的权限。我已经测试过在没有 sudo 的情况下启动子进程,这使得这个子进程可以工作,但会破坏其他所有内容。任何降级子进程的尝试都没有成功。这是我目前拥有的:

   # Demote user for subprocess
   def demote():

    def set_ids():
        os.setgid(1000)
        os.initgroups("tsmc", 1000)
        os.setuid(1000)

    return set_ids()


    # Set environment variables
    kinesisEnv = os.environ.copy()
    kinesisEnv["PATH"]='/home/tsmc/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/bin:/home/tsmc/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'
    kinesisEnv["LD_LIBRARY_PATH"]="/home/tsmc/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/lib:"
    kinesisEnv["USER"]="tsmc"
    kinesisEnv["USERNAME"]="tsmc"
    kinesisEnv["LOGNAME"]="tsmc"
    kinesisEnv["PWD"]="/home/tsmc/amazon-kinesis-video-streams-producer-sdk-cpp"
    kinesisEnv["HOME"]="/home/tsmc/"

    # gstreamer inspect command to inspect kvssink
    command = 'gst-inspect-1.0 kvssink'    

    # Start subprocess
    kinesisProcess = subprocess.Popen(command.split(), preexec_fn=demote, stdout=subprocess.PIPE)

    output = kinesisProcess.communicate()[0]
    print(output.decode("utf-8"))

有谁知道我能做些什么吗?

谢谢你。

标签: pythonsubprocessgstreameramazon-kinesis

解决方案


推荐阅读