python - 带有 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"))
有谁知道我能做些什么吗?
谢谢你。
解决方案
推荐阅读
- python - 什么时候应该从ABC继承?
- html - 无法用崇高的文字或漂亮的汤美化 html 代码
- wordpress - Gravity Forms 的验证脚本,可以检测电话号码的第一个位置是否存在数字 1 或 +1
- angularjs - Angular.forEach 转换值以在排序表中使用
- android - 我如何从橙色 pi 4g iot 的引脚读取数据以及如何在“/system/bin/sh”中写入数据。如何修复“无法创建引脚:只读文件系统”
- python - 正则表达式反向引用乘法
- next.js - 在没有选择器的情况下编写 styled-jsx
- git - 如何在 Windows 上删除旧的本地 Git 分支?
- java - 有没有机会从现有的本体中找到特定的类并使用耶拿为其添加等效类
- google-cloud-monitoring - kubernetes.io/node 的“内存可分配利用率”> 100%