2017-02-10 21 views
0

私はプロジェクトにDockerを使用しています。目標は、VLCでビデオを再生し、RTSPプロトコルを介してデータストリームを送信することで、他のマシン(ユーザ)が自分のマシン上のライブでビデオを見ることができるようにすることです。 ビデオ、Dockerfileとbashファイルは同じフォルダにあります。 によって成功dockerイメージでvlcを実行して、rtspプロトコル経由でビデオストリームを送信する

FROM ubuntu 

RUN apt-get update \ 
&& apt-get install -y vlc 

COPY simulate_video_stream.sh /tmp/ 
COPY counter.mp4 /tmp/ 
ENTRYPOINT ["/tmp/simulate_video_stream.sh"] 

ビルドされていますDockerfile

# Two facultativ parameters : -f <nameOfTheVideoFile> and -i <URL_Output> 
SCRIPTPATH=$(cd $(dirname $0) ; pwd -P); 
name=$SCRIPTPATH"/counter.mp4"; 
sdp="rtsp://:8554/flux"; 
while getopts "f:i:" OPTNAME 
do 
    case $OPTNAME in 
     f) name=$OPTARG;; 
     i) sdp=$OPTARG;; 
    esac 
done 
sout="#transcode{vb=0,scale=0,acodec=mpga,ab=128,channels=2,samplerate=44100}:rtp{sdp="$sdp"}"; 
vlc -vvv $name --sout $sout 

そして、ここにある:ここでは、bashのファイル(simulate_video_stream.sh)私が使用している "sudoのドッキングウィンドウ-tテストを構築するには。""docker run test -f namevideo.mp4 -i rtsp://:8554/test"のようなbashファイルで定義された2つのパラメータを使用したいと考えています しかし、 "write pipe:bad fileディスクリプタ " どうすればよいですか?ありがとう

+0

ホストO Sとは何ですか? –

+0

私はUbuntu 16.04 x64 –

答えて

0

まず、スクリプトを実行するためにinterpreterを与える必要があります。

vlcrootとして実行することはできません。

第三に、あなたは、引数としてファイルを提供し、ファイルがホスト上にあるときvlcは、容器の内部から、それを開くために期待することはできません。まずマウントする必要があります。

第四に、あなたはそれ以外の場合は#と共に開始され、引数vlcにそれを渡さないようbashはそれを無視し、$sout変数を引用する必要があります。

第5に、ストリームを外部で利用できるようにするには、ポートをexposeにする必要があります。

次のように変更します。

Dockerfile:

FROM ubuntu 

RUN apt-get update \ 
&& apt-get install -y vlc 

RUN useradd -m vlcuser 

COPY simulate_video_stream.sh /tmp/ 
COPY counter.mp4 /tmp/ 
ENTRYPOINT ["/tmp/simulate_video_stream.sh"] 

スクリプトsimulate_video_stream.sh

#!/bin/bash 
# Two facultativ parameters : -f <nameOfTheVideoFile> and -i <URL_Output> 
SCRIPTPATH=$(cd $(dirname $0) ; pwd -P); 
name=$SCRIPTPATH"/counter.mp4"; 
sdp="rtsp://:8554/flux"; 
while getopts "f:i:" OPTNAME 
do 
    case $OPTNAME in 
     f) name=$OPTARG;; 
     i) sdp=$OPTARG;; 
    esac 
done 
sout="#transcode{vb=0,scale=0,acodec=mpga,ab=128,channels=2,samplerate=44100}:rtp{sdp="$sdp"}"; 
su vlcuser -c "vlc -vvv $name --sout '$sout'" 

としてコンテナを実行しますが何であるか、

好奇心のうち
docker run -v $PWD/namevideo.mp4:/tmp/namevideo.mp4 -p 8554:8554 test -f /tmp/namevideo.mp4 -i rtsp://:8554/test 
+0

を使用しました。ビルドは成功しました。しかし、あなたが提供した 'docker run'コマンドを実行したとき、vlcがすぐに終了したように見えました。そして、私は同じサブネット内の別のコンピュータで[rtsp:// my ip adress:8554/test]を使ってフラックスを見ることができません。 –

+0

さらに、bashファイルとDockerfileと同じフォルダにあるcounter.mp4でテストしたい場合は、 'docker run'コマンドの 'namevideo.mp4'を 'counter'で置き換えるのが正しいでしょうか。 mp4 '?どうもありがとうございました。 –

+0

私が期待したのは、 'docker run'がvlcプレーヤーを開き、ビデオを再生するということです。この間、私たちはリンクを介して訪問することができます。私は推測する? –

関連する問題