This page has been robot translated, sorry for typos if any. Original content here.

Organization of live broadcasting from the ip camera on the site

On the page


Organization of live broadcasting from the ip camera on the site

A task

Consider the task of organizing a live video broadcast from an ip camera on a site.

Our booth consists of three components:

  • ip camera
  • media server
  • flash player in client side browser

IP camera selection

In order to be comfortable taking the stream from the camera, it must support the broadcast of live video (usually via the RTSP protocol). There is another option when you can pick up a JPEG with the current frame using the HTTP protocol from the camera at any time, but this is not so convenient. Therefore, the D'Link DCS-2121 camera with RTSP support was selected.

Media server

The most difficult part of the configuration is that it has the functions of receiving video from the camera, converting to the required format, caching and distributing to clients. Looking ahead, I’ll say that in this case it’s advisable to distribute using the Adobe RTMP protocol, which is natively supported by flash players, or via HTTP.

There are paid solutions for RTMP: FMS , Wowza (the latter is free with less than ten simultaneous connections) and free ( red5 and rtmpd ).

If you distribute via HTTP, then there are even more options, since the task is divided into two subtasks:

  1. video conversion
  2. video distribution

Naturally, the number of combinations is growing. For distribution, you can use, for example, apache or lighthttpd. For conversion - ffmpeg.

In my case it was necessary to do everything

  1. under Linux
  2. is free
  3. simply

Therefore, I settled on the simple option, in my opinion, in which on the server we need only one program - the VLC video player , which, however, we will configure and compile for our needs. This video player does not yet have normal RTMP support, so we will send the flv file via HTTP.

flash player in client side browser

In principle, anyone should do, but for some reason, for some reason, it didn’t work for me to configure JW Player . The FLV file was downloaded endlessly to the client, and buffering did not end. Timing was running out and changed the player to Flow player , as a result of which this problem disappeared.

Customization

Variables

In order not to make reservations further, we assume that I have the server ip address 10.0.0.2, cameras 10.0.0.3, mask 255.0.0.0 and the gateway 10.0.0.1, in Linux I work as user user, I run all the necessary commands through sudo .

Camera setup

We will configure the camera via the web interface, set the necessary network parameters: ip address, mask, gateway, set the time. We also need to specify the port on which the camera will send the RTSP stream (port 554 is used as standard, I left it).

In the section “Audio and Video” we set the characteristics of the video that we need. In any case, we can change the bitrate and size of the image later on the server during conversion, but so that everything is neat, we indicate immediately here. We will use MPEG4 640x480, 15 fps, 512kb bitrate.

Also here it is necessary to specify the RTSP URL, this address will be used when taking the stream from the camera, we are required to specify only the file name. I entered camera1.sdp. As a result, the stream will be available at rtsp: //10.0.0.3: 554 / camera1.sdp

Server Tuning

Any Linux will do, I used Debian Lenny. Create a folder in the home where we will work:

  1. mkdir ~user / install cd ~user / install
  2. mkdir ~user / install cd ~user / install

We need to download the codecs, so we connect the debian-multimedia repository:

  1. wget http: // www.debian-multimedia.org / pool / main / d / debian-multimedia-keyring / debian-multimedia-keyring_2008.10.16_all.deb dpkg -i . / debian-multimedia-keyring_2008.10.16_all.deb
  2. wget http: // www.debian-multimedia.org / pool / main / d / debian-multimedia-keyring / debian-multimedia-keyring_2008.10.16_all.deb dpkg -i . / debian-multimedia-keyring_2008.10.16_all.deb

Add the line to /etc/apt/sources.list

  1. deb http: // www.debian-multimedia.org stable main non-freel.deb

We will need to install many packages before we go directly to the VLC. I tried to list everything here, but maybe something is not enough, in this case, the missing ones will need to be delivered.

  1. apt-get update apt-get install yasm make subversion xcb libxcb1-dev libxcb-shm0-dev libxcb-keysyms0-dev \ libavformatcvs51 libavcodeccvs51 libavcodeccvs51-dev libavformatcvs51-dev libavutilcvs49-dev \ autoconf g++ gcc liba52-0.7.4-dev libdvbpsi3-dev libdvbpsi3 libfaad-dev libfaac-dev libfribidi-dev \ libavutilcvs49 libavahi-client3 libavahi-common-dev libpostproccvs51-dev libswscalecvs0-dev \ libswscalecvs0 libxvidcore4-dev libxvidcore4 libx264-dev libx264- 54 automake1.9 libgcrypt11-dev \ liblame-dev liblua5.1- 0 -dev libmad0-dev libmpeg2- 4 -dev libogg-dev libvorbis-dev zlib1g-dev \ libvcdinfo-dev libiso9660-dev libcddb2-dev libflac-dev libx264-dev x264
  2. apt-get update apt-get install yasm make subversion xcb libxcb1-dev libxcb-shm0-dev libxcb-keysyms0-dev \ libavformatcvs51 libavcodeccvs51 libavcodeccvs51-dev libavformatcvs51-dev libavutilcvs49-dev \ autoconf g++ gcc liba52-0.7.4-dev libdvbpsi3-dev libdvbpsi3 libfaad-dev libfaac-dev libfribidi-dev \ libavutilcvs49 libavahi-client3 libavahi-common-dev libpostproccvs51-dev libswscalecvs0-dev \ libswscalecvs0 libxvidcore4-dev libxvidcore4 libx264-dev libx264- 54 automake1.9 libgcrypt11-dev \ liblame-dev liblua5.1- 0 -dev libmad0-dev libmpeg2- 4 -dev libogg-dev libvorbis-dev zlib1g-dev \ libvcdinfo-dev libiso9660-dev libcddb2-dev libflac-dev libx264-dev x264
  3. apt-get update apt-get install yasm make subversion xcb libxcb1-dev libxcb-shm0-dev libxcb-keysyms0-dev \ libavformatcvs51 libavcodeccvs51 libavcodeccvs51-dev libavformatcvs51-dev libavutilcvs49-dev \ autoconf g++ gcc liba52-0.7.4-dev libdvbpsi3-dev libdvbpsi3 libfaad-dev libfaac-dev libfribidi-dev \ libavutilcvs49 libavahi-client3 libavahi-common-dev libpostproccvs51-dev libswscalecvs0-dev \ libswscalecvs0 libxvidcore4-dev libxvidcore4 libx264-dev libx264- 54 automake1.9 libgcrypt11-dev \ liblame-dev liblua5.1- 0 -dev libmad0-dev libmpeg2- 4 -dev libogg-dev libvorbis-dev zlib1g-dev \ libvcdinfo-dev libiso9660-dev libcddb2-dev libflac-dev libx264-dev x264
  4. apt-get update apt-get install yasm make subversion xcb libxcb1-dev libxcb-shm0-dev libxcb-keysyms0-dev \ libavformatcvs51 libavcodeccvs51 libavcodeccvs51-dev libavformatcvs51-dev libavutilcvs49-dev \ autoconf g++ gcc liba52-0.7.4-dev libdvbpsi3-dev libdvbpsi3 libfaad-dev libfaac-dev libfribidi-dev \ libavutilcvs49 libavahi-client3 libavahi-common-dev libpostproccvs51-dev libswscalecvs0-dev \ libswscalecvs0 libxvidcore4-dev libxvidcore4 libx264-dev libx264- 54 automake1.9 libgcrypt11-dev \ liblame-dev liblua5.1- 0 -dev libmad0-dev libmpeg2- 4 -dev libogg-dev libvorbis-dev zlib1g-dev \ libvcdinfo-dev libiso9660-dev libcddb2-dev libflac-dev libx264-dev x264
  5. apt-get update apt-get install yasm make subversion xcb libxcb1-dev libxcb-shm0-dev libxcb-keysyms0-dev \ libavformatcvs51 libavcodeccvs51 libavcodeccvs51-dev libavformatcvs51-dev libavutilcvs49-dev \ autoconf g++ gcc liba52-0.7.4-dev libdvbpsi3-dev libdvbpsi3 libfaad-dev libfaac-dev libfribidi-dev \ libavutilcvs49 libavahi-client3 libavahi-common-dev libpostproccvs51-dev libswscalecvs0-dev \ libswscalecvs0 libxvidcore4-dev libxvidcore4 libx264-dev libx264- 54 automake1.9 libgcrypt11-dev \ liblame-dev liblua5.1- 0 -dev libmad0-dev libmpeg2- 4 -dev libogg-dev libvorbis-dev zlib1g-dev \ libvcdinfo-dev libiso9660-dev libcddb2-dev libflac-dev libx264-dev x264
  6. apt-get update apt-get install yasm make subversion xcb libxcb1-dev libxcb-shm0-dev libxcb-keysyms0-dev \ libavformatcvs51 libavcodeccvs51 libavcodeccvs51-dev libavformatcvs51-dev libavutilcvs49-dev \ autoconf g++ gcc liba52-0.7.4-dev libdvbpsi3-dev libdvbpsi3 libfaad-dev libfaac-dev libfribidi-dev \ libavutilcvs49 libavahi-client3 libavahi-common-dev libpostproccvs51-dev libswscalecvs0-dev \ libswscalecvs0 libxvidcore4-dev libxvidcore4 libx264-dev libx264- 54 automake1.9 libgcrypt11-dev \ liblame-dev liblua5.1- 0 -dev libmad0-dev libmpeg2- 4 -dev libogg-dev libvorbis-dev zlib1g-dev \ libvcdinfo-dev libiso9660-dev libcddb2-dev libflac-dev libx264-dev x264
  7. apt-get update apt-get install yasm make subversion xcb libxcb1-dev libxcb-shm0-dev libxcb-keysyms0-dev \ libavformatcvs51 libavcodeccvs51 libavcodeccvs51-dev libavformatcvs51-dev libavutilcvs49-dev \ autoconf g++ gcc liba52-0.7.4-dev libdvbpsi3-dev libdvbpsi3 libfaad-dev libfaac-dev libfribidi-dev \ libavutilcvs49 libavahi-client3 libavahi-common-dev libpostproccvs51-dev libswscalecvs0-dev \ libswscalecvs0 libxvidcore4-dev libxvidcore4 libx264-dev libx264- 54 automake1.9 libgcrypt11-dev \ liblame-dev liblua5.1- 0 -dev libmad0-dev libmpeg2- 4 -dev libogg-dev libvorbis-dev zlib1g-dev \ libvcdinfo-dev libiso9660-dev libcddb2-dev libflac-dev libx264-dev x264
  8. apt-get update apt-get install yasm make subversion xcb libxcb1-dev libxcb-shm0-dev libxcb-keysyms0-dev \ libavformatcvs51 libavcodeccvs51 libavcodeccvs51-dev libavformatcvs51-dev libavutilcvs49-dev \ autoconf g++ gcc liba52-0.7.4-dev libdvbpsi3-dev libdvbpsi3 libfaad-dev libfaac-dev libfribidi-dev \ libavutilcvs49 libavahi-client3 libavahi-common-dev libpostproccvs51-dev libswscalecvs0-dev \ libswscalecvs0 libxvidcore4-dev libxvidcore4 libx264-dev libx264- 54 automake1.9 libgcrypt11-dev \ liblame-dev liblua5.1- 0 -dev libmad0-dev libmpeg2- 4 -dev libogg-dev libvorbis-dev zlib1g-dev \ libvcdinfo-dev libiso9660-dev libcddb2-dev libflac-dev libx264-dev x264

We will put everything else from the source so that we can enable or disable certain options. Let's start with the latest version of ffmpeg:

  1. svn checkout svn : // svn.ffmpeg.org / ffmpeg / trunk ffmpeg cd ffmpeg . / configure make make install cd ..
  2. svn checkout svn : // svn.ffmpeg.org / ffmpeg / trunk ffmpeg cd ffmpeg . / configure make make install cd ..
  3. svn checkout svn : // svn.ffmpeg.org / ffmpeg / trunk ffmpeg cd ffmpeg . / configure make make install cd ..
  4. svn checkout svn : // svn.ffmpeg.org / ffmpeg / trunk ffmpeg cd ffmpeg . / configure make make install cd ..
  5. svn checkout svn : // svn.ffmpeg.org / ffmpeg / trunk ffmpeg cd ffmpeg . / configure make make install cd ..
  6. svn checkout svn : // svn.ffmpeg.org / ffmpeg / trunk ffmpeg cd ffmpeg . / configure make make install cd ..

If you plan to work with the h264 codec, then you can configure ffmpeg with options

./configure --enable-libx264 --enable-gpl

Next, we need the very needed live555 streaming media library, it is with the help of it that our VLC player will work with RTSP.

  1. wget http: // www.live555.com / liveMedia / public / live555-latest.tar.gz tar zxvf . / live555-latest.tar.gz cd live . / genMakefiles linux make cd ..
  2. wget http: // www.live555.com / liveMedia / public / live555-latest.tar.gz tar zxvf . / live555-latest.tar.gz cd live . / genMakefiles linux make cd ..
  3. wget http: // www.live555.com / liveMedia / public / live555-latest.tar.gz tar zxvf . / live555-latest.tar.gz cd live . / genMakefiles linux make cd ..
  4. wget http: // www.live555.com / liveMedia / public / live555-latest.tar.gz tar zxvf . / live555-latest.tar.gz cd live . / genMakefiles linux make cd ..
  5. wget http: // www.live555.com / liveMedia / public / live555-latest.tar.gz tar zxvf . / live555-latest.tar.gz cd live . / genMakefiles linux make cd ..
  6. wget http: // www.live555.com / liveMedia / public / live555-latest.tar.gz tar zxvf . / live555-latest.tar.gz cd live . / genMakefiles linux make cd ..

Now go to the VLC player itself. We go in http://download.videolan.org/pub/videolan/vlc/latest/ and see what is the latest version, after which we pump out and unpack the sources. In my case, it looked like this:

  1. wget http: // download.videolan.org / pub / videolan / vlc / latest / vlc-1.1.0.tar.bz2 bzip2 -d vlc-1.1.0.tar.bz2 tar xvf . / vlc-1.1.0.tar cd vlc-1.1.0
  2. wget http: // download.videolan.org / pub / videolan / vlc / latest / vlc-1.1.0.tar.bz2 bzip2 -d vlc-1.1.0.tar.bz2 tar xvf . / vlc-1.1.0.tar cd vlc-1.1.0
  3. wget http: // download.videolan.org / pub / videolan / vlc / latest / vlc-1.1.0.tar.bz2 bzip2 -d vlc-1.1.0.tar.bz2 tar xvf . / vlc-1.1.0.tar cd vlc-1.1.0
  4. wget http: // download.videolan.org / pub / videolan / vlc / latest / vlc-1.1.0.tar.bz2 bzip2 -d vlc-1.1.0.tar.bz2 tar xvf . / vlc-1.1.0.tar cd vlc-1.1.0
The VLC configuration is the most creative part, we will try to make it so that we need what and nothing more.
  1. . / configure --enable-release --enable-faad --disable-dbus --disable-hal \ --disable-remoteosd --disable-qt4 --disable-skins2 --disable-activex \ --disable-v4l2 --disable-libv4l2 --disable-x11 --disable-xvideo --disable-glx \ --disable-opengl --disable-visual --disable-nls --disable-mozilla \ --enable-realrtsp --enable-flac --disable-lua --prefix = / usr\ --with-live555-tree = / home / user / install / live --with-ffmpeg-tree = / home / user / install / ffmpeg
  2. . / configure --enable-release --enable-faad --disable-dbus --disable-hal \ --disable-remoteosd --disable-qt4 --disable-skins2 --disable-activex \ --disable-v4l2 --disable-libv4l2 --disable-x11 --disable-xvideo --disable-glx \ --disable-opengl --disable-visual --disable-nls --disable-mozilla \ --enable-realrtsp --enable-flac --disable-lua --prefix = / usr\ --with-live555-tree = / home / user / install / live --with-ffmpeg-tree = / home / user / install / ffmpeg
  3. . / configure --enable-release --enable-faad --disable-dbus --disable-hal \ --disable-remoteosd --disable-qt4 --disable-skins2 --disable-activex \ --disable-v4l2 --disable-libv4l2 --disable-x11 --disable-xvideo --disable-glx \ --disable-opengl --disable-visual --disable-nls --disable-mozilla \ --enable-realrtsp --enable-flac --disable-lua --prefix = / usr\ --with-live555-tree = / home / user / install / live --with-ffmpeg-tree = / home / user / install / ffmpeg
  4. . / configure --enable-release --enable-faad --disable-dbus --disable-hal \ --disable-remoteosd --disable-qt4 --disable-skins2 --disable-activex \ --disable-v4l2 --disable-libv4l2 --disable-x11 --disable-xvideo --disable-glx \ --disable-opengl --disable-visual --disable-nls --disable-mozilla \ --enable-realrtsp --enable-flac --disable-lua --prefix = / usr\ --with-live555-tree = / home / user / install / live --with-ffmpeg-tree = / home / user / install / ffmpeg
  5. . / configure --enable-release --enable-faad --disable-dbus --disable-hal \ --disable-remoteosd --disable-qt4 --disable-skins2 --disable-activex \ --disable-v4l2 --disable-libv4l2 --disable-x11 --disable-xvideo --disable-glx \ --disable-opengl --disable-visual --disable-nls --disable-mozilla \ --enable-realrtsp --enable-flac --disable-lua --prefix = / usr\ --with-live555-tree = / home / user / install / live --with-ffmpeg-tree = / home / user / install / ffmpeg
  6. . / configure --enable-release --enable-faad --disable-dbus --disable-hal \ --disable-remoteosd --disable-qt4 --disable-skins2 --disable-activex \ --disable-v4l2 --disable-libv4l2 --disable-x11 --disable-xvideo --disable-glx \ --disable-opengl --disable-visual --disable-nls --disable-mozilla \ --enable-realrtsp --enable-flac --disable-lua --prefix = / usr\ --with-live555-tree = / home / user / install / live --with-ffmpeg-tree = / home / user / install / ffmpeg

In the last line, we indicate the paths to the ffmpeg and live555 sources that we worked with in the previous steps. If you plan to run the player under root, you must add the key --enable-run-as-root , if the codec h264 is --enable-x264

Next, compile and put the player. This procedure takes a long time. In my case, something was constantly missing for compilation, I tried to list all the necessary libraries, but in any case, everything can change from version to version, so watch out for errors and deliver what it asks for.

  1. make make install
  2. make make install

Software installation is complete, all that remains for us is to launch the player with the necessary parameters. In general, a VLC player is unique in its flexibility.

The player will work for us in two simultaneous streams: the first will receive video from the camera via RTSP, multiplex it into MPEG TS and send it to localhost: 8001, the second will take the result from localhost: 8001, pinch, encode, pack in the FLV container and send it by HTTP on port 8080. Make 2 files to run these threads, respectively:

  1. mkdir ~user / scripts touch ~user / scripts / stream1.sh touch ~user / scripts / stream2.sh
  2. mkdir ~user / scripts touch ~user / scripts / stream1.sh touch ~user / scripts / stream2.sh
  3. mkdir ~user / scripts touch ~user / scripts / stream1.sh touch ~user / scripts / stream2.sh

In stream1.sh, insert the lines:

  1. #!/bin/sh vlc -vv rtsp: // 10.0.0.3: 554 / camera1.sdp --rtsp-caching = 100000 --no-sout-audio --sout \ '#std{access=http,dst=127.0.0.1:8001,mux=ts}'
  2. #!/bin/sh vlc -vv rtsp: // 10.0.0.3: 554 / camera1.sdp --rtsp-caching = 100000 --no-sout-audio --sout \ '#std{access=http,dst=127.0.0.1:8001,mux=ts}'
  3. #!/bin/sh vlc -vv rtsp: // 10.0.0.3: 554 / camera1.sdp --rtsp-caching = 100000 --no-sout-audio --sout \ '#std{access=http,dst=127.0.0.1:8001,mux=ts}'

Here we pointed out to the player what and where to lose. The stream from the camera rtsp: //10.0.03: 554 / camera1.sdp was selected as the source, they indicated the size of the buffer and immediately made our movie dumb ( --no-sout-audio ). The result will be given by this stream to the address http://127.0.0.1:8001 In stream2.sh we insert the lines:

  1. #!/bin/sh vlc -vv http: // 127.0.0.1: 8001 --loop --http-caching = 10000 --sout \ '#transcode{vcodec=FLV1,vb=512,fps=15}:std{access=http{mime=video/x-flv},dst=:8080/view01.flv,mux=ffmpeg{mux=flv}}'
  2. #!/bin/sh vlc -vv http: // 127.0.0.1: 8001 --loop --http-caching = 10000 --sout \ '#transcode{vcodec=FLV1,vb=512,fps=15}:std{access=http{mime=video/x-flv},dst=:8080/view01.flv,mux=ffmpeg{mux=flv}}'
  3. #!/bin/sh vlc -vv http: // 127.0.0.1: 8001 --loop --http-caching = 10000 --sout \ '#transcode{vcodec=FLV1,vb=512,fps=15}:std{access=http{mime=video/x-flv},dst=:8080/view01.flv,mux=ffmpeg{mux=flv}}'

The second stream takes http://127.0.0.1:8001, has its own cache, pinches it (vb - bitrate, fps - fps) and distributes it via HTTP on port 8080 as the file view01.flv. If there are several interfaces on the server, then you can also specify in dst the specific ip address of the interface on which you want to distribute.

In industrial operation, threads must be started in the background and without reference to the console, in our example, we will start them in just two consoles. vlc should fill up the buffer for a while, and then go into normal mode. The duration of filling depends on the size of the cache ( --rtsp-caching and --http-caching, respectively). We will need to create a page with the player. For simplicity, we will do it on the same server.

  1. apt-get install apache2
Player setup
  1. cd / var / www /

Next, download the Flow Player. There is a settings wizard on the developer's site. To use it, you need to register. A wizard is available at http://flowplayer.org/setup/index.html .

Since we have a live stream and the camera displays the current time directly in the picture, the player should be minimalistic. Turn off everything except the “Fullscreen” button, download the player and unpack the contents of the archive into the / var / www folder on our server.

To make everything perfect, I also renamed the files swf and js to player.swf and player.js respectively. I would not write about this fact if I had forgotten what they were called before. Therefore, in the text I will also use my new names. So, create the html page

  1. touch / var / www / index.html
We save the following text into it:
  1. < html >< head > < meta http-equiv = "content-type" content = "text/html; charset=UTF-8" >< script type = "text/javascript" src = "/player.js" >< / script > < title > Просмотр камеры 1 < / title > < / head > < body > < h1 > Камера № 1 < / h1 > < a href = "http://stream.kubsu.ru:8080/view01.flv" style = "display:block;width:520px;height:330px;margin:10px auto;" id = "player" > < / a > < script > flowplayer("player", "/player.swf"); < / script > < / body >< / html >
  2. < html >< head > < meta http-equiv = "content-type" content = "text/html; charset=UTF-8" >< script type = "text/javascript" src = "/player.js" >< / script > < title > Просмотр камеры 1 < / title > < / head > < body > < h1 > Камера № 1 < / h1 > < a href = "http://stream.kubsu.ru:8080/view01.flv" style = "display:block;width:520px;height:330px;margin:10px auto;" id = "player" > < / a > < script > flowplayer("player", "/player.swf"); < / script > < / body >< / html >
  3. < html >< head > < meta http-equiv = "content-type" content = "text/html; charset=UTF-8" >< script type = "text/javascript" src = "/player.js" >< / script > < title > Просмотр камеры 1 < / title > < / head > < body > < h1 > Камера № 1 < / h1 > < a href = "http://stream.kubsu.ru:8080/view01.flv" style = "display:block;width:520px;height:330px;margin:10px auto;" id = "player" > < / a > < script > flowplayer("player", "/player.swf"); < / script > < / body >< / html >
  4. < html >< head > < meta http-equiv = "content-type" content = "text/html; charset=UTF-8" >< script type = "text/javascript" src = "/player.js" >< / script > < title > Просмотр камеры 1 < / title > < / head > < body > < h1 > Камера № 1 < / h1 > < a href = "http://stream.kubsu.ru:8080/view01.flv" style = "display:block;width:520px;height:330px;margin:10px auto;" id = "player" > < / a > < script > flowplayer("player", "/player.swf"); < / script > < / body >< / html >
  5. < html >< head > < meta http-equiv = "content-type" content = "text/html; charset=UTF-8" >< script type = "text/javascript" src = "/player.js" >< / script > < title > Просмотр камеры 1 < / title > < / head > < body > < h1 > Камера № 1 < / h1 > < a href = "http://stream.kubsu.ru:8080/view01.flv" style = "display:block;width:520px;height:330px;margin:10px auto;" id = "player" > < / a > < script > flowplayer("player", "/player.swf"); < / script > < / body >< / html >
  6. < html >< head > < meta http-equiv = "content-type" content = "text/html; charset=UTF-8" >< script type = "text/javascript" src = "/player.js" >< / script > < title > Просмотр камеры 1 < / title > < / head > < body > < h1 > Камера № 1 < / h1 > < a href = "http://stream.kubsu.ru:8080/view01.flv" style = "display:block;width:520px;height:330px;margin:10px auto;" id = "player" > < / a > < script > flowplayer("player", "/player.swf"); < / script > < / body >< / html >
  7. < html >< head > < meta http-equiv = "content-type" content = "text/html; charset=UTF-8" >< script type = "text/javascript" src = "/player.js" >< / script > < title > Просмотр камеры 1 < / title > < / head > < body > < h1 > Камера № 1 < / h1 > < a href = "http://stream.kubsu.ru:8080/view01.flv" style = "display:block;width:520px;height:330px;margin:10px auto;" id = "player" > < / a > < script > flowplayer("player", "/player.swf"); < / script > < / body >< / html >
  8. < html >< head > < meta http-equiv = "content-type" content = "text/html; charset=UTF-8" >< script type = "text/javascript" src = "/player.js" >< / script > < title > Просмотр камеры 1 < / title > < / head > < body > < h1 > Камера № 1 < / h1 > < a href = "http://stream.kubsu.ru:8080/view01.flv" style = "display:block;width:520px;height:330px;margin:10px auto;" id = "player" > < / a > < script > flowplayer("player", "/player.swf"); < / script > < / body >< / html >
  9. < html >< head > < meta http-equiv = "content-type" content = "text/html; charset=UTF-8" >< script type = "text/javascript" src = "/player.js" >< / script > < title > Просмотр камеры 1 < / title > < / head > < body > < h1 > Камера № 1 < / h1 > < a href = "http://stream.kubsu.ru:8080/view01.flv" style = "display:block;width:520px;height:330px;margin:10px auto;" id = "player" > < / a > < script > flowplayer("player", "/player.swf"); < / script > < / body >< / html >
  10. < html >< head > < meta http-equiv = "content-type" content = "text/html; charset=UTF-8" >< script type = "text/javascript" src = "/player.js" >< / script > < title > Просмотр камеры 1 < / title > < / head > < body > < h1 > Камера № 1 < / h1 > < a href = "http://stream.kubsu.ru:8080/view01.flv" style = "display:block;width:520px;height:330px;margin:10px auto;" id = "player" > < / a > < script > flowplayer("player", "/player.swf"); < / script > < / body >< / html >
  11. < html >< head > < meta http-equiv = "content-type" content = "text/html; charset=UTF-8" >< script type = "text/javascript" src = "/player.js" >< / script > < title > Просмотр камеры 1 < / title > < / head > < body > < h1 > Камера № 1 < / h1 > < a href = "http://stream.kubsu.ru:8080/view01.flv" style = "display:block;width:520px;height:330px;margin:10px auto;" id = "player" > < / a > < script > flowplayer("player", "/player.swf"); < / script > < / body >< / html >
  12. < html >< head > < meta http-equiv = "content-type" content = "text/html; charset=UTF-8" >< script type = "text/javascript" src = "/player.js" >< / script > < title > Просмотр камеры 1 < / title > < / head > < body > < h1 > Камера № 1 < / h1 > < a href = "http://stream.kubsu.ru:8080/view01.flv" style = "display:block;width:520px;height:330px;margin:10px auto;" id = "player" > < / a > < script > flowplayer("player", "/player.swf"); < / script > < / body >< / html >
  13. < html >< head > < meta http-equiv = "content-type" content = "text/html; charset=UTF-8" >< script type = "text/javascript" src = "/player.js" >< / script > < title > Просмотр камеры 1 < / title > < / head > < body > < h1 > Камера № 1 < / h1 > < a href = "http://stream.kubsu.ru:8080/view01.flv" style = "display:block;width:520px;height:330px;margin:10px auto;" id = "player" > < / a > < script > flowplayer("player", "/player.swf"); < / script > < / body >< / html >
  14. < html >< head > < meta http-equiv = "content-type" content = "text/html; charset=UTF-8" >< script type = "text/javascript" src = "/player.js" >< / script > < title > Просмотр камеры 1 < / title > < / head > < body > < h1 > Камера № 1 < / h1 > < a href = "http://stream.kubsu.ru:8080/view01.flv" style = "display:block;width:520px;height:330px;margin:10px auto;" id = "player" > < / a > < script > flowplayer("player", "/player.swf"); < / script > < / body >< / html >
  15. < html >< head > < meta http-equiv = "content-type" content = "text/html; charset=UTF-8" >< script type = "text/javascript" src = "/player.js" >< / script > < title > Просмотр камеры 1 < / title > < / head > < body > < h1 > Камера № 1 < / h1 > < a href = "http://stream.kubsu.ru:8080/view01.flv" style = "display:block;width:520px;height:330px;margin:10px auto;" id = "player" > < / a > < script > flowplayer("player", "/player.swf"); < / script > < / body >< / html >

Everything is ready, go to the browser on http://10.0.0.2/ and watch the broadcast.