技术选择

服务器操作系统:windows 点播服务器:Nginx 转码和生成清单:ffmpeg 手机客户端:ExoPlayer SDK

Nginx和ffmpeg都是跨平台的,应该也可以在linux上搭建出来。 搭建视频点播和直播系统使用的协议不一样,视频点播网站多数是基于http协议,而直播协议很多,比如rtsp和rtmp,其中rtmp是Adobe的私有协议。 视频直播服务器可以使用Live555,VLC(不只是播放器,也可以直播),DarwinStreamingSrvr5.5.5(Apple开源,只有5.5.5版本)很多软件实现,多数都是开源跨平台,也比较好用,客户端如果是cs形式,那选择vlc还是不错的,如果是bs形式,感觉上videojs还不错。 视频点播服务器我选择使用Nginx搭建,如何搭建后面讲解,另外性能和并发上还没测试过。单独点播一个文件比如*.ts/.mp4都是配置一下就可以实现,在vlc中也能正常播放。我在Android手机中播放器选择了google的ExoPlayer,ExoPlayer是开源的并且支持HLS,Demo中的HLS示例都是Apple的.m3u8格式,上面简单配置ExoPlayer播放不了, 所以我选择基于Nginx搭建一个可以点播m3u8格式的服务器,*.m3u8文件本身就是个节目清单。

搭建方式

解压Nginx并配置,在html目录下创建一个文件夹hls,然后修改nginx.conf文件,修改后的内容如下:

location / {

root html;

index index.html index.htm;

location ~ .flv {

flv;

}

location ~ .mp4 {

mp4;

}

#location ~* \.mp4$ {

#root /movies/;

#}

location /hls {

# Serve HLS fragments

types

{

application/vnd.apple.mpegurl m3u8;

video/mp2t ts;

}

#root /hls;

add_header Cache-Control no-cache;

}

}

然后还需要修改mime.types文件,在application/zip zip;后加入

application/x-mpegURL m3u8;

application/vnd.apple.mpegurl m3u8;

在video/x-msvideo avi;后加入

video/MP2T ts;

启动Nginx,如果没有错误的话服务器应该搭建好了,但是现在还没有播放的内容。找一个*.mp4文件,然后解压刚下载的ffmpeg,用管理员身份启动命令行窗口,进入ffmpeg的bin目录下执行:

ffmpeg -i *mp4 -hls_time 5 -hls_list_size 0 -c:v libx264 -c:a aac -strict -2 -f hls output.m3u8

这个时间可能会有点长,命令执行完后就把那些文件放到nginx的/html/hls目录下。Ffmpeg的一些参数介绍一下(网上抄来的): -hls_time n: 设置每片的长度,默认值为2。单位为秒 -hls_list_size n:设置播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5 -hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0.这个选项能够避免在磁盘上存储过多的片,而且能够限制写入磁盘的最多的片的数量 -hls_start_number n:设置播放列表中sequence number的值为number,默认值为0 注意:播放列表的sequence number 对每个segment来说都必须是唯一的,而且它不能和片的文件名(当使用wrap选项时,文件名有可能会重复使用)混淆。

如果是*.ts文件你可能需要下面这样,具体我也没用过,有问题就搜一下吧。

ffmpeg -i *.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 10 output%03d.ts

生成ts文件:

A. ffmpeg -y -i -vcodec copy -acodec copy -vbsf h264_mp4toannexb

B.. /segmenter -i out.ts -n 10 -p segmenter_test -m test.m3u8 -u

手机播放器实现

源码导入到eclipse可能有点问题,查看一下mainfest里面权限什么的,修改一下Samples.java里的HLS播放地址,加入http://127.0.0.1/hls/output.m3u8 播放之后可能没有全屏的功能,我用的方法是修改playeractivity横屏和全屏显示。

android:name=".PlayerActivity"

android:launchMode="singleTask"

android:screenOrientation="landscape"

android:label="@string/app_name" >

在onCreate(Bundle savedInstanceState)中的setContentView(R.layout.player_activity)方法前加入下面两行代码:

requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏

现在run一下app可以看到全屏的播放效果了(我这个图是手机截屏,其实全屏播放时没有上面的蓝色状态栏)。

还是挺简单的吧?其实研究服务器搭建和Exoplayer问题,查了很多资料,还是花了我一周时间的。

手机视频网页点播服务器,手机视频点播系统搭建完整方案相关推荐

  1. 顶峰Android手机视频转换器,凡人Android手机视频转换器

    凡人Android手机视频转换器是一款专门针对谷歌Android安卓操作系统的手机开发的Android视频转换器工具,可以帮助您将各种流行的视频格式转换为Android手机所支持的视频格式和音频格式. ...

  2. 全新H5视频付费点播打赏影视网站系统程序源码搭建

    这是全新H5视频付费点播打赏影视网站系统程序,前后端分离设计,支持游客登陆.VIP会员.代理推广系统.免费观看.单独设置付费点播. 前端自动检测,web环境下打开自动弹出屏蔽页面. 后端后台设置非常全 ...

  3. phpvod+fms4.5局域网视频点播系统搭建

    phpvod+fms4.5局域网视频点播系统搭建 所需资源: PHPVOD FMS4.5 下载地址: 链接:http://pan.baidu.com/s/1bHXoLK 密码:xgpm 本例下载的是集 ...

  4. 使用腾讯云服务器的windows系统搭建CSGO服务器

    使用腾讯云服务器的windows系统搭建CSGO服务器 准备工作 在正式安装搭建之前需要先到steam官方游戏服务器账户申请公网秘钥Login Token(需要登录自己的steam账号) 网址:htt ...

  5. 免费视频直播点播服务器系统,搭建一套完整的网络视频流媒体直播/点播服务系统需要具备哪些条件?...

    原标题:搭建一套完整的网络视频流媒体直播/点播服务系统需要具备哪些条件? 随着Internet的飞速发展,网上现场直播已经从实验阶段走向了实用阶段.各式各样的社会活动都可以借助网上现场直播方式传遍全世 ...

  6. 手机文件传云服务器,手机云服务器传文件

    手机云服务器传文件 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 如果私钥文件 ...

  7. 手机文件传到服务器,手机文件传输到服务器

    手机文件传输到服务器 内容精选 换一换 Winscp无法连接到服务器.SSH连接工具例如Xshell可以正常连接云服务器.其他SSH工具连接云服务器正常,但是Winscp无法连接到服务器.说明SSH服 ...

  8. 手机app项目云服务器,手机app接入云服务器

    手机app接入云服务器 内容精选 换一换 SAP NetWeaver实例运行在弹性云服务器上.需要根据部署场景,创建一台或多台弹性云服务器.请参见方案介绍和数据规划章节,确定弹性云服务器数量及相关规划 ...

  9. 华为手机如何显示连接服务器,手机怎么连接服务器

    手机怎么连接服务器 内容精选 换一换 通过内网连接云手机实例时,需要在租户VPC中创建一台弹性云服务器,作为连接云手机的跳板机器.若创建云手机服务器时未使用自定义网络,还需在云手机租户的VPC和服务器 ...

最新文章

  1. pytorch 反卷积 可视化_手推反卷积
  2. FlipView和自定义值转换器
  3. 使用Gson对复杂json对象的成员进行删选
  4. tensorflow在训练的时候权重是nan,如何解决
  5. Systemd 入门教程之实战篇
  6. JAVA进阶教学之(Object类中的equals方法)
  7. Python.密码本生成
  8. python怎么定义向量类_python的用户定义向量类
  9. Sql递归(用with 实现递归查询)
  10. linux刻录win10u盘_使用UltraISO在Windows 10下刻录Ubuntu 18.04.2 U盘的方法
  11. 【轻松搞懂设计模式】观察者模式
  12. python tkinter下载_学习使用tkinter
  13. html5地区下拉菜单,JS特效:地区下拉菜单
  14. 百思不得姐(第三天)
  15. (汤家凤、张宇起床铃声)震惊!考研党竟然用这种方式让汤家凤老师,张宇老师亲自叫他们起床!!
  16. 主治医师考计算机考试报名时间,【医疗热点】2020卫生资格考试各科考试时间汇总!...
  17. 串口线传输距离之讨论
  18. 计算机专业考研参考书目及辅导书
  19. 855计算机应用基础,2017年曲阜师范大学工学院855计算机应用基础考研导师圈点必考题汇编...
  20. 【板栗糖GIS】wps—如何修改文档中的批注名称

热门文章

  1. 【野蛮成长】经济学:红海与蓝海
  2. 零基础学UI设计要学多久?
  3. Oracle ORA-12154: TNS:could not resolve the connect identifier specified(不积跬步,无以至千里)
  4. 2018远程案例三星笔记本硬盘错误信息分析
  5. 计蒜客习题:走迷宫2
  6. Android 来电监听
  7. gb和gib的区别_GB和GIB的区别
  8. 烤仔看世界 | Zuckerverse:Facebook帝国的“元”设想
  9. 【Vuejs】953- Vue 项目性能优化技巧分享
  10. 解决org.apache.ibatis.binding.BindingException Invalid bound statement (not found) com.fs.mapper.UserM