推荐方案三:超级简单

方案一.hls (缺陷:需要花很多时间切片)

1.Distributor ID: Ubuntu
  Description: Ubuntu 16.04.3 LTS
  Release: 16.04
 Codename: xenial

2.Linux 4.4.0-89-generic #112-Ubuntu SMP Mon Jul 31 19:38:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

mkdir ~/working

切换到~/working目录下

cd ~/working

获取nginx源码:

wget http://nginx.org/download/nginx-1.13.4.tar.gz

解压

tar xvf nginx-1.13.4.tar.gz

获取最新的nginx-rtmp源码

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

切换到nginx目录

cd nginx-1.13.4

配置

./configure --with-http_ssl_module --with-http_stub_status_module --add-module=../nginx-rtmp-module

编译和安装配置有nginx-rtmp模块的nginx

make

sudo make install

安装nginx初始化脚本

获取nginx初始化脚本

wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx

将脚本复制到/etc/init.d/目录下

sudo cp nginx /etc/init.d/

修改权限

sudo chmod +x /etc/init.d/nginx

使用update-rc.d进行启动项管理

sudo update-rc.d nginx defaults

创建目录结构

sudo mkdir /HLS

sudo mkdir /HLS/mobile

sudo mkdir /HLS/live

sudo mkdir /video_recordings

sudo chmod -R 777  /video_recordings

配置nginx

备份原来的nginx配置文件

sudo cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.back

sudo gedit /usr/local/nginx/conf/nginx.conf

往/usr/local/nginx/conf/nginx.conf添加以下内容

worker_processes 1;
error_log logs/error.log debug;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
allow play all;

#creates our "live" full-resolution HLS videostream from our incoming encoder stream and tells where to put the HLS video manifest and video fragments
application live {
allow play all;
live on;
record all;
record_path /video_recordings;
record_unique on;
hls on;
hls_nested on;
hls_path /HLS/live;
hls_fragment 10s;

#creates the downsampled or "trans-rated" mobile video stream as a 400kbps, 480x360 sized video
exec ffmpeg -i rtmp://192.168.1.104:1935/$app/$name -acodec copy -c:v libx264 -preset veryfast -profile:v baseline -vsync cfr -s 480x360 -b:v 400k -maxrate 400k -bufsize 400k -threads 0 -r 30 -f flv rtmp://192.168.1.104:1935/mobile/$;
}

#creates our "mobile" lower-resolution HLS videostream from the ffmpeg-created stream and tells where to put the HLS video manifest and video fragments
application mobile {
allow play all;
live on;
hls on;
hls_nested on;
hls_path /HLS/mobile;
hls_fragment 10s;
}

#allows you to play your recordings of your live streams using a URL like "rtmp://my-ip:1935/vod/filename.flv"
application vod {
play /video_recordings;
}
}
}

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

server {
listen 80;
server_name 192.168.1.104;

#creates the http-location for our full-resolution (desktop) HLS stream - "http://my-ip/live/my-stream-key/index.m3u8"
location /live {
types {
application/vnd.apple.mpegurl m3u8;
}
alias /HLS/live;
add_header Cache-Control no-cache;
}

#creates the http-location for our mobile-device HLS stream - "http://my-ip/mobile/my-stream-key/index.m3u8"
location /mobile {
types {
application/vnd.apple.mpegurl m3u8;
}
alias /HLS/mobile;
add_header Cache-Control no-cache;
}

#allows us to see how stats on viewers on our Nginx site using a URL like: "http://my-ip/stats"
location /stats {
stub_status;
}

#allows us to host some webpages which can show our videos: "http://my-ip/my-page.html"
location / {
root html;
index index.html index.htm;
}
}
}

!!记得将本地内网地址换成你实际使用的哦!!

启动nginx服务

sudo service nginx start

安装ffmpeg

sudo apt-get install ffmpeg

一.推流开始

1.ffmpeg -re -i test.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost/mobile/haha   /*将本地视频文件test.mp4转码推流到本地服务器*/

2.在本机端打开vlc播放器

输入流地址rtmp://localhost/mobile/haha即可观看视频,不过本地播放有些卡顿,网络播放更卡

这种方法很不可靠,本身切片就很耗费cpu资源的

二.可以先将视频文件切换成片段保存到服务器上然后再播放:

1.在服务器端:ffmpeg -i test.mp4 -f hls test.m3u8 (此test.m3u8保存在/HLS/mobile/目录下,这种切片方法是错误的,生成的test.m3u8文件总是只有最新的ts片段,导致只能播放一个片段,几秒钟就没了)

正确做法如下:

ffmpeg -i test.mp4 -codec:v libx264 -codec:a mp3 -map 0 -f ssegment -segment_format mpegts -segment_list test.m3u8 -segment_time 10 out%04d.ts
解析参数:
-i 指定输入文件
ssegment的一些参数: -segment_format mpegts 指定输出格式为mpegts;-segment_list test.m3u8 指定配置输出的列表文件名;-segment_time 10 指定切片时长为10秒

2.直接在浏览器上输入http://your-ip/mobile/test.m3u8即可播放视频

方案二.apache+php+mysql

1.安装apache

sudo apt-get install apache2

2.安装php

sudo apt-get install php

3.安装mysql

sudo apt-get install mysql-server

此方案未做完

方案三.emby media server

1.ubuntu16.04不能从不安全的仓库安装软件,因此使用以下命令添加emby秘钥

wget -nv http://download.opensuse.org/repositories/home:emby/xUbuntu_16.04/Release.key -O Release.key

sudo apt-key add - < Release.key

sudo apt-get update

2.sudo sh -c "echo 'deb http://download.opensuse.org/repositories/home:/emby/xUbuntu_16.04/ /' > /etc/apt/sources.list.d/emby-server.list"

sudo apt-get update

sudo apt-get install emby-server

启动emby-server

sudo systemctl start emby-server

设置开机启动emby-server

sudo systemctl enable emby-server

访问localhost:8096进行设置

												

在ubuntu16.04上搭建视频服务器的更多相关文章

  1. Ubuntu 18.04上搭建FTP服务器

    1.准备工作需要安装并运行的Ubuntu Server 18.04系统.当然还需要一个具有sudo权限的账号. 2.安装VSFTPVSFTP程序位于标准存储库中,因此可以使用单个命令删除安装.打开终端 ...

  2. Ubuntu14.04上搭建FTP服务器

    Ubuntu上常用的Ftp服务器是vsFTPd.安装前检查下是否已经装好了.用 sudo service vsftpd restart,如果提示重启成功之类的信息,说明此服务器已经安装好了vsFTPd ...

  3. Ubuntu16.04 下搭建git服务器及gitweb+nginx配置

    本文转自:http://blog.csdn.net/water_horse/article/details/68958140 1.安装所需软件 fengjk@water:~$ sudo apt-get ...

  4. 四条命令快速在Ubuntu16.04上配置DNS服务器

    1. apt install dnsmasq -y 2. vim /etc/dnsmasq.d/resolv.conf address=/xxx.yyy.com/21.xx.xx.x 3. servi ...

  5. Ubuntu 16.04上搭建CDH5.16.1集群

    本文参考自:<Ubuntu16.04上搭建CDH5.14集群> 1.准备三台(CDH默认配置为三台)安装Ubuntu 16.04.4 LTS系统的服务器,假设ip地址分布为 192.168 ...

  6. Mac上搭建直播服务器Nginx+rtmp

    简介 nginx是非常优秀的开源服务器,用它来做hls或者rtmp流媒体服务器是非常不错的选择,本人在网上整理了安装流程,分享给大家并且作备忘. 步骤安装 1.安装Homebrow Homebrew简 ...

  7. Ubuntu 14.04快速搭建SVN服务器及日常使用【转】

    转自:http://www.linuxidc.com/Linux/2015-05/117735.htm 1.介绍  Subversion是一个自由,开源的版本控制系统,这个版本库就像一个普通的文件服务 ...

  8. 微软.NET年芳15:我在Azure上搭建Photon服务器(C#.NET)

    网上火热的“微软.NET年芳15”文章,我也得写点什么嘛,毕竟我还是现任的微软MVP. 摘录网上的“.NET 15周年”信息如下: 微软的 .NET 框架本周迎来了 15 岁生日..NET 的第一个版 ...

  9. Ubuntu 14.04快速搭建SVN服务器及日常使用

    1.介绍  Subversion是一个自由,开源的版本控制系统,这个版本库就像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况.这样就可以很方面恢复到以前的版本,并可以查看数据更改 ...

随机推荐

  1. 20144306《网络对抗》Web安全基础实践

    1  实验内容 SQL注入攻击 XSS攻击 CSRF攻击 2  实验过程记录 2.1WebGoat说明与安装 关于WebGoat WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台 ...

  2. 2018/04/04 PHP 中的 数组排序问题

    简单说一下为什么要总结一下PHP中关于数组排序的问题. 在很多时候我们对于数组要进行排序,但是 PHP 中对于排序已经有了很多封装. 但是某些函数是修改原数组,一部分是返回修改后数组,与其一个个试,不 ...

  3. Jedis 对 Redis 的操作详解

    1. JedisUtil2. 键操作3. 字符串操作4. 字节串4. 整数和浮点数5. 列表6. 集合(Set)7. 散列8. 排序sort 本篇主要阐述Jedis对redis的五大类型的操作:字符串 ...

  4. 010-jdk1.8版本新特性二-Optional类,Stream流

    1.5.Optional类 1.定义 Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. Optional 是个 ...

  5. [vue]vue条件渲染v-if(template)和自定义指令directives

    条件渲染: v-if/template <div id="app"> <h1>v-show: display: none</h1> <di ...

  6. c++多态特性总结

    将父类比喻为电脑的外设接口,子类比喻为外设,现在我有移动硬盘.U盘以及MP3,它们3个都是可以作为存储但是也各不相同.如果我在写驱动的时候,我用个父类表示外设接口,然后在子类中重写父类那个读取设备的虚 ...

  7. linux命令:linux权限管理命令

    权限管理命令   文件的权限只有你两个人可以更改,一个是root,一个是文件所有者. 命令名称:chmod 命令英文原意:change the permissions mode of a  file ...

  8. linux 加减符号

    [root@LocalWeb01 ~]# aa=11[root@LocalWeb01 ~]# bb=22[root@LocalWeb01 ~]# cc=$aa+$bb[root@LocalWeb01 ...

  9. UVA10066

    /* 最长公共子序列 */ #include <cstdio> #include <string.h> #include <iostream> const int ...

  10. OS X 下动态库的引用

    foo.c #include <stdio.h> void foo(void) { printf("foo.\n"); } main.c #include <st ...