Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Http Media Streaming Server

I have developed video streaming application with RED5 media server(RTMP). Instead of RTMP need to stream live video through HTTP.

Any open source HTTP media server??

Is any open source server which supports both RTMP and HTTP ?

Thanks in advance.

like image 916
DIVAKAR SRINIVASAN Avatar asked Dec 04 '13 06:12

DIVAKAR SRINIVASAN


People also ask

Does HTTP support streaming?

HTTP live streaming (HLS) is a widely used video streaming protocol that can run on almost any server and is supported by most devices.

What is stream media server?

A media server is a computer that stores content and streams it to other devices. Consider Netflix: Its media servers host all its original shows and you then use an app on your smartphone, tablet or TV to watch them. Your devices don't need to download the show in advance. They just stream it straight from the server.


3 Answers

Primarily, HTTP and RTMP are different protocols. You won't serve RTMP inside the HTTP. (Although you can do this for a tunneling solution).

Exist several ways to do HTTP Streaming. Such as HLS, DASH, Smooth and Progresive Download. If you need serve streaming to iOS (iPad, iPhone, Apple TV) you will need to use HLS.

As well as arcyqwerty said. Any HTTP server is able to serve HTTP Streaming. But you will need to prepare your media files and the manifest files before serving.

Here are some links very important for read about HLS (HTTP Live Streaming):

  • https://developer.apple.com/library/ios/documentation/networkinginternet/conceptual/streamingmediaguide/Introduction/Introduction.html

  • https://developer.apple.com/streaming/

  • http://features.encoding.com/http-live-streaming-hls/

  • https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming-12

What about open source servers. I know these:

  • Flumotion: http://www.flumotion.net/

  • Gstreamer Server Streaming: http://cgit.freedesktop.org/gstreamer/gst-streaming-server/

  • Nginx HLS Module: http://nginx.org/en/docs/http/ngx_http_hls_module.html (Only Nginx Plus)

Or you can do like me and use GStreamer for segmenting and make manifest. And finaly I use the Nginx only to serve them.

I hope I helped you a little bit.

like image 130
Luiz Fernando Avatar answered Oct 12 '22 09:10

Luiz Fernando


Any HTTP server that can serve files (apache, nginx, IIS, etc) can "stream" media over HTTP. So if you want, you can keep RED5 for RTMP and set up an HTTP server to serve the same files.

You may want to look into Media streaming basics - HTTP vs RTMP for info about the protocols

Adding the nginx-rtmp module to nginx might be what you're looking for if you need a single-product solution

https://github.com/arut/nginx-rtmp-module

like image 39
arcyqwerty Avatar answered Oct 12 '22 11:10

arcyqwerty


I use this and it works properly. (Ubuntu 12.04 TLS server)

Step by step:

sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
wget http://nginx.org/download/nginx-1.6.0.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
tar -zxvf nginx-1.6.0.tar.gz
unzip master.zip
cd nginx-1.6.0

./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master --with-http_flv_module --with-http_mp4_module
make
sudo make install

sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx

NGINX Config: (/usr/local/nginx/conf/nginx.conf)

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

rtmp {
    server {
    listen 1935;
    chunk_size 4000;
    # video on demand for flv files
    application vod {
        play /var/flvs;
    }

    # video on demand for mp4 files
        application vod2 {
        play /var/mp4s;
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    gzip  on;

    server {
        listen       80;
        server_name  192.168.52.16;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        # This URL provides RTMP statistics in XML
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            # XML stylesheet to view RTMP stats.
            # Copy stat.xsl wherever you want
            # and put the full directory path here
            root /var/www/;
        }

    location /hls {
        # Serve HLS fragments
        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t ts;
        }
        alias /tmp/app;
        expires -1;
    }

#   location /hds {
#       f4f;    # Use the HDS handler to manage requests
#           # serve content from the following location
#       alias /var/www/video;
#   }

    location /video {
        mp4;
        flv;
        mp4_buffer_size     4M;
        mp4_max_buffer_size 10M;
    }

    location / {
        root   html;
        index  index.html index.htm;
    }

    error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
    }
}

Save the config file and:

sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx

Next... Create two directories:

mkdir /var/flvs
mkdir /var/mp4s

You need copy an mp4 file to the mp4s directory. For example: sample.mp4

Finaly

sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx

Try:

rtmp://your_server_ip/vod2/sample.mp4

(suggest: you use the VLC media player)

or html code

<html>
<head>
    <title>RTMP Video</title>
    <!-- flowplayer javascript component -->
    <script src="http://releases.flowplayer.org/js/flowplayer-3.2.12.min.js"></script>
</head>

<body>
<div id="player" style="width:644px;height:480;margin:0 auto;text-align:center">
    <img src="images/background.jpg" height="480" width="644" /></div>
<script>

$f("player", "http://releases.flowplayer.org/swf/flowplayer-3.2.16.swf", {
    clip: {
        url: 'sample.mp4',
        scaling: 'fit',
        provider: 'hddn'
    },

    plugins: {
        hddn: {
            url: "swf/flowplayer.rtmp-3.2.13.swf",

            // netConnectionUrl defines where the streams are found
            netConnectionUrl: 'rtmp://your_server_ip:1935/vod2/'

        }
    },
    canvas: {
        backgroundGradient: 'none'
    }
});
</script>
</body>
</html>
like image 31
Zsolt Boszormenyi Avatar answered Oct 12 '22 11:10

Zsolt Boszormenyi