⼿机视频⽹页点播服务器,⼿机视频点播系统搭建完整⽅案技术选择
服务器操作系统: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,然后修改f⽂件,修改后的内容如下:
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;
战争大片
}
王耀庆郭晏青}
然后还需要修改pes⽂件,在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
⼿机播放器实现
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问题,查了很多资料,还是花了我⼀周时间的。