Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2129142
  • 博文数量: 229
  • 博客积分: 7217
  • 博客等级: 上校
  • 技术积分: 3224
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-19 17:23
个人简介

个人主页https://xugaoxiang.com,微信公众号: Dev_Club 或者搜索 程序员Club

文章分类

全部博文(229)

文章存档

2017年(1)

2016年(20)

2015年(23)

2013年(1)

2012年(23)

2011年(68)

2010年(62)

2009年(31)

分类: Android平台

2016-08-20 11:37:12

软硬件环境

  • ubuntu 16.04
  • Android Studio 2.1.3
  • OTT BOx with android 5.1.1
  • nginx 1.11.3
  • nginx-rtmp-module
  • vitamio

前言

当下,直播已经成为网络热词,它不单单是指传统广播电视的实时播放,更是更为广泛的音视频实时分享的延伸。早先,直播数据源只可能来自于电视台及节目制作中心,但是放眼现在,基于计算机技术的高速发展,任何人都可以独自完成内容的制作,再利用身边的终端设备完成分享,你不仅仅是受众,同样可以成为主角。可以说,时下流行的"网红"文化,直播技术立下了汗马功劳。本文旨在搭建一个最简单的视频直播系统,包括服务器端及android客户端,采用了nginx、nginx-rtmp、vitamio及ffmpeg。

rtmp协议

RTMP是Real Time Messaging Protocol的缩写,是被设计用来进行实时数据通信的网络协议。它是一个协议族,包括rtmpe、rtmpt、rtmps等,是直播技术中常用的协议

服务端配置

nginx添加rtmp支持

tar xvf nginx-1.11.3.tar.gz
cd nginx-1.11.3
mkdir build
./configure --prefix=/home/djstava/nginx-1.11.3/build --add-module=/home/djstava/nginx-rtmp-module
make
make install 
修改配置文件nginx.conf

编辑/home/djstava/nginx-1.11.3/build/conf/nginx.conf,在文件末尾添加如下内容

rtmp {
    server {
        listen 1935;
        ping 30s;
        notify_method get;

        application myapp {
            live on;

            # sample play/publish handlers
            #on_play 
            #on_publish 

            # sample recorder
            #recorder rec1 {
            #    record all;
            #    record_interval 30s;
            #    record_path /tmp;
            #    record_unique on;
            #}

            # sample HLS
            #hls on;
            #hls_path /tmp/hls;
            #hls_sync 100ms;
        }

        # Video on demand
        #application vod {
        #    play /var/Videos;
        #}

        # Video on demand over HTTP
        #application vod_http {
        #    play 
        #}
    }
} 
启动nginx服务
/home/djstava/nginx-1.11.3/build/sbin/nginx 
ffmpeg推送rtmp

找一个本地的视频文件进行推送,命令为

ffmpeg -re -i 大话西游之月光宝盒.BD1280超清国粤双语中英双字.mp4 -c copy -f flv rtmp://localhost/myapp/mystream 
ffplay播放测试

如果没有安装ffplay的话,也可以用vlc

ffplay rtsmp://localhost/myapp/mystream 
后记

前面的步骤都是在本机中进行的。可是在实际应用中,情况会复杂的多,nginx可能是一台服务器,ffmpeg推流的可能就是另一台服务器,这样的话,可将localhost换成对应的IP地址。如果数据源来自摄像头,同样可以通过ffmpeg进行推送,命令如下

ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://10.10.10.84/myapp/mystream1 

rtmp_02

Android客户端播放

之前已经写过一个基于vitamio的视频播放器,地址是

private String[] files = {"rtmp demo","apple demo"}; 

在listview的item被点击后发送包含播放地址的intent

Intent intent = new Intent(MainActivity.this, VitamioVideoViewActivity.class);
intent.putExtra("movieUrl", "rtmp://10.10.10.84/myapp/mystream");
startActivity(intent); 

rtmp_01

参考文献

阅读(1810) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~