私は、パーソナルコンピューターからHTTPライブストリーミングをサポートするデバイス(iOSデバイスと一部のAndroidを考えてください)にHDTVをストリーミングするプロジェクトに取り組んでいます。私はビデオのフォーマットとストリーミングの側面を持っています。私が今実装しようとしているのは、チャネルをリモートで変更する簡単な方法です。
私の現在の方法では、SSH経由で接続して古いストリームを強制終了し、新しいストリームを開始します。これは機能しますが、きれいではありません。お母さんや彼女が使えるものが欲しいです。CGIスクリプトを介してチャネル切り替えを発行するHTML5アプリを作成することにしました。現在、ストリームが実行されているかどうかを判断するために子プロセスを呼び出し、次に実際にストリームを調整するためにサブ子プロセスを呼び出すフォームを持つ親プロセスがあります。
コンピューターからライブビデオをストリーミングしているので、サブチャイルドプロセスを無期限に実行する必要があります。残念ながら、私の親プロセスが終了すると、サブ子プロセスで開始されたバックグラウンドプロセスが終了するようです。
nohup、setsid、daemonを使用して、単純な&を試しました。デーモンは最もクリーンに実行されますが、親が終了すると終了します。-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}}'
サブチャイルドが終了しないようにするにはどうすればよいですか?Ubuntu12.04でApacheを実行する