gpt4 book ai didi

html - 生成守护进程的 CGI Bash 脚本

转载 作者:行者123 更新时间:2023-11-28 02:04:49 24 4
gpt4 key购买 nike

我正在从事一个项目,将 HDTV 从个人电脑流式传输到支持 HTTP 实时流式传输的设备(想想 iOS 设备和一些安卓设备)。我有视频的格式和流媒体方面的问题。我现在尝试实现的是一种远程更改 channel 的简单方法。

我目前的方法是通过 SSH 连接以终止旧流并开始新流。这有效,但并不漂亮。我想要我妈妈或女朋友可以使用的东西。我决定构建一个 HTML5 应用程序,通过 CGI 脚本发布 channel 切换。我目前有一个父进程,其表单调用子进程来确定流是否正在运行,然后调用子进程来实际调整流。

当我从我的计算机流式传输实时视频时,我需要子进程无限期地运行。 不幸的是,当我的父进程完成时,子进程中启动的后台进程似乎终止了。

我尝试了一个简单的 &,使用 nohup、setsid 和守护进程。守护进程运行最干净,但仍会在父进程完成时终止。即使有 -r 标志。我将把我的代码放在下面,也许有人会对我如何实现这个或实现相同目标的更好方法有想法?谢谢! (哦,我知道杀死 vlc 并不是杀死流的好方法,如果你有更好的方法我洗耳恭听)

parent invoking child:
----------------------
./ChangeChannel.sh $channel #passed from form submission


child (ChangeChannel.sh):
-------------------------
#!/bin/bash

directory=./Channels/
newchannel=$1

if [ $(pidof vlc) ]
then
sudo kill $(pidof vlc)
fi
daemon -r -v -d $directory$newchannel &


subchild example:
-----------------
vlc atsc://frequency=605029000 --intf=dummy --sout-transcode-audio-sync :live-cache=3000 --sout='#transcode{vcodec=h264,vb=150,fps=25,width=480,scale=1,venc=x264{aud,profile=baseline,level=30,keyint=15,bframes=0,ref=1},acodec=aac,ab=40,channels=2,samplerate=22050}:duplicate{dst=std{mux=ts,dst=-,access=livehttp{seglen=16,delsegs=true,numsegs=10,index=/var/www/stream/live.m3u8,index-url=content/live-######.ts},mux=ts{use-key-frames},dst=/var/www/stream/content/live-######.ts,ratecontrol=true}}'

我怎样才能防止子进程终止???在 Ubuntu 12.04 上运行 Apache

最佳答案

我明白了!

对于任何对如何操作感兴趣的人,我改变了策略以使用 nohup、&、disown 和 >/dev/null 2>&1。

老实说,我仍然不太确定我是如何让它工作的……只是通过一些有根据的猜测进行了大量的试验和错误。我的代码如下:

parent invocation:
------------------
nohup ./ChangeChannel.sh $channel & disown


child invocation:
-----------------
sudo nohup su user $directory$newchannel &> /dev/null 2>&1


subchild invocation:
--------------------
vlc atsc://frequency=605029000 --intf=dummy --sout-transcode-audio-sync :live-cache=3000 --sout='#transcode{vcodec=h264,vb=150,fps=25,width=480,scale=1,venc=x264{aud,profile=baseline,level=30,keyint=15,bframes=0,ref=1},acodec=aac,ab=40,channels=2,samplerate=22050}:duplicate{dst=std{mux=ts,dst=-,access=livehttp{seglen=16,delsegs=true,numsegs=10,index=/var/www/stream/live.m3u8,index-url=content/live-######.ts},mux=ts{use-key-frames},dst=/var/www/stream/content/live-######.ts,ratecontrol=true}}' & disown

ChangeChannel.sh 使用 sudo 通过 cgi 执行 su,以便以 root 以外的用户身份执行 vlc。看起来有点乱,但它确实有效。

关于html - 生成守护进程的 CGI Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12156452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com