文档章节

手机视频点播系统搭建完整方案

开源中国0托
 开源中国0托
发布于 2016/06/24 14:25
字数 1158
阅读 1556
收藏 3

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

技术选择

服务器操作系统: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,网址:http://nginx.org/en/download.html 生成*.m3u8清单需要切片,开源有好用的是ffmpeg,下载ffmpeg网址:https://ffmpeg.org/download.html

解压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 <in file> -vcodec copy -acodec copy -vbsf h264_mp4toannexb <output file>
B..  /segmenter -i out.ts -n 10 -p segmenter_test -m test.m3u8 -u

现在可以使用vlc测试一下了:http://127.0.0.1/hls/output.m3u8

手机播放器实现

网站:http://wear.techbrood.com/guide/topics/media/exoplayer.html 源码:https://github.com/google/ExoPlayer/ 一些参考可以在github里搜索:https://github.com/search?utf8=%E2%9C%93&q=exoplayer+hls

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

        <activity
            android:name=".PlayerActivity"
            android:launchMode="singleTask" 
            android:screenOrientation="landscape"
            android:label="@string/app_name" >
        </activity>

输入图片说明 在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问题,查了很多资料,还是花了我一周时间的。

© 著作权归作者所有

上一篇: docker笔记
下一篇: Genymotion安装方法
开源中国0托
粉丝 8
博文 14
码字总数 3401
作品 0
成都
技术主管
私信 提问
阿里云点播:视频点播主要应用场景和常见问题及答案分享

阿里云视频点播(ApsaraVideo for VoD)是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、高效云剪辑处理、分发加速、视频播放于一体的一站式音视频点播解决方案,整体服务构建在...

领取上987432.cn
05/13
0
0
开源网校系统 - EduSoho

Edusoho网络课堂是面向个人、学校、培训机构及企业用户的友好、开源、高性价比的在线教育建站系统。 Edusoho提供在线教学、网校管理、云视频点播、直播、移APP等功能,为使教育机构能够以最低...

EduSoho网络课堂
2013/10/10
31.7K
9
基于EasyDSS流媒体解决方案创建视频点播、短视频、视频资源库等视频播放系统

版权声明:本文为EasyDarwin开源社区原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiejiashu/article/details/88787207 随着前端技术的不断发展,视频点播早已不再是IE6时代的浏...

xiejiashu
03/25
0
0
迅睿视频电影系统

迅睿视频电影系统采用 PHP7+MySql 开发的视频点播程序,具有强劲功能、卓越性能、安全健壮,以及灵活、方便、人性化设计简单易用是最大的特色,是快速架设视频网站首选软件。 系统基于 xunr...

迅睿CMS-PHP开源CMS程序
08/10
5.4K
1
基于 Laravel 开发的在线点播系统 - MeEdu

介绍 随着知识付费领域的兴起,尤其是知识付费领域的龙头“得到”的成功,知识付费领域俨然成为了新的风口。经过这几年的发展,知识付费领域的基础建设有了很大的进步,市场上面很多知识付费...

小滕ha
2018/10/08
15.3K
6

没有更多内容

加载失败,请刷新页面

加载更多

为什么面试必问线程状态?你的回答满分了吗

看很多同学的面经、网上的面试资料,都不约而同的提到了一个基础问题:“你知道线程有几种状态吗?状态之间的扭转是怎样的?”,有准备的同学都知道有五种:New(新建)、Runnable(可运行)...

Z_J_H
30分钟前
4
0
如何保障云上数据安全?一文详解云原生全链路加密

点击下载《不一样的 双11 技术:阿里巴巴经济体云原生实践》 本文节选自《不一样的 双11 技术:阿里巴巴经济体云原生实践》一书,点击上方图片即可下载! 作者 李鹏(壮怀)阿里云容器服务高...

阿里巴巴云原生
30分钟前
3
0
获取数组的第一个元素

我有一个数组: array( 4 => 'apple', 7 => 'orange', 13 => 'plum' ) 我想获得此数组的第一个元素。 apple 预期结果: apple 一个要求: 它不能通过引用传递来完成 ,所以array_shift不是一......

javail
32分钟前
4
0
哈希情史知多少

<p align="right">——日拱一卒,不期而至!</p> 简介 hash是我们工作中经常听到的词,比如哈希表、哈希函数、hashCode、HashTable、HashMap等等,那么它们之间到底有怎样的爱恨情仇呢?来一...

彤哥读源码
38分钟前
4
0
SpringCloud 学习(5) --- Zuul(一)基本概念、配置

[TOC] Spring Cloud eureka:注册中心 服务端:提供注册 客户端:进行注册 ribbon:负载均衡(集群) Hystrix:熔断器,执行备选方案 Feign:远程调用 Zuul:网关,统一入口。 1.1、一夫当关,...

庭前云落
40分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部