1、ffmpeg安装
链接:https://pan.baidu.com/s/1je95StJs9piCRFK86w6LQw?pwd=jcf8
提取码:jcf8
--来自百度网盘超级会员V5的分享
解压配置环境变量即可
2、ffmpeg命令行转码视频
ffmpeg431.exe -i ande_302.mp4 -vbsf h264_mp4toannexb -vcodec libx264 -acodec aac -strict -2 -s 640x480 -r 30 -g 60 -start_number 0 -hls_time 5 -hls_list_size 0 -threads 1 -f hls -y aaa.m3u8
转码结束后是一系列的ts文件和一个m3u8索引文件,转码任务已经完成,下一步是怎样实现网络端读取m3u8视频流
参考资料
https://blog.csdn.net/teachermei/article/details/127444658
这一篇有关于ffmpeg的介绍
ffmpeg的下载及安装_ffmpeg下载_西凉的悲伤的博客-CSDN博客
FFmpeg 的介绍与使用_zouzhiheng的博客-CSDN博客
ffmpeg命令详解_zzcchunter的博客-CSDN博客
[总结]FFMPEG视音频编解码零基础学习方法_ffmpeg音频编解码_雷霄骅的博客-CSDN博客
最简单的视频网站(JavaEE+FFmpeg)_雷霄骅的博客-CSDN博客
本视频网站支持直播(通过RTMP实现)和点播(通过HTTP实现)
FFMpeg 常用命令格式转换,视频合成_ffmpeg转换视频格式_音视频开发老马的博客-CSDN博客
CSDN后台私信或文末卡片加入免费领取最新最全C++/音视频开发学习提升资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
使用ffmpeg把mp4与m3u8相互转换的操作_ffmpeg m3u_音视频开发老舅的博客-CSDN博客
html5播放m3u8视频,web端看直播_51CTO博客_m3u8视频怎么播放
使用FFmpeg+go搭建m3u8点播服务器_m3u8服务器_椛茶的博客-CSDN博客
HLS(HTTP Live Streaming)
Django播放m3u8格式网络视频(videojs)_django video.js_佐倉的博客-CSDN博客
请参考:
FFmpeg+Nginx+rtmp+videojs+VLC快速搭建网络直播网站.pdf
《FFmpeg入门详解--音视频原理及应用:梅会东:清华大学出版社》
京东自营链接:https://item.jd.com/13377793.html
html中播放m3u8文件_51CTO博客_m3u8文件怎么播放
https://www.cnblogs.com/luozeyang/p/14551010.html,django播放本地m3u8视频
# django中请求m3u8
class M3u8View(APIView):
def get(self, request):
"""在这儿进行相关权限校验"""
file_data = open('index.m3u8文件绝对路径', 'rb') # 需要区分不同视频的m3u8文件,可以通过路由参数来区分
response = HttpResponse(file_data)
response['Content-Type'] = 'application/x-mpegURL' # 设置content-type
return response
下面是学习前段相关的知识
nvm是nodejs的版本管理工具,node version manage
npm是nodejs的包管理工具,node package manage
安装nvm的时候自动安装npm
nodejs安装时自带npm
gulp:前端自动化开发流程,比如把sass转css,css和js压缩,图片研所,代码自动保存更新,浏览器自动刷新等
前端开发环境的配置
nvm,node,gulp
https://github.com/coreybutler/nvm-windows/releases
下载安装后要配置环境变量
nvm安装不同版本的node
nvm install 6.4.0命令就是安装6.4.0的node
nvm uninstall 6.4.0卸载版本
nvm use 6.4.0就是启用6.4.0的node
nvm list列出当前已安装的版本
nvm list available列出可以使用的版本
nvm node_mirror url 设置下载镜像地址
nvm npm_mirror 设置npm包管理工具的镜像地址
使用npm前需要使用nvm use指定使用的node版本,npm会跟随node的版本
安装包可以安装在本地,也可以安装在全局
安装在本地就可以require("包名")调用,相当于python中的import
本地安装
npm install package
全局安装
npm install package -g
express包相当于python中的django
npm install express -g全局安装
安装在本地才可以用require语句引用
安装在本地就是安装在当前目录下
卸载本地和卸载全局包都是加上-g参数
npm update 包名 更新包
npm search 包名 搜索包
安装时使用镜像
npm install package cnpm --registry=https://registry.npm.taobao.org
使用gulp
npm init 会在本地生成一个gulpfile.js项目配置文件,用于记录当前项目依赖了那些包
拿到一个项目,执行npm install 就会自动安装gulpfile.js中的包【在这个js文件所在目录处执行】
npm installan安装一个包时,加上参数--save-dev,就会自动把这个包的信息加入到gulpfile.js文件中
npm install gulp --save-dev
使用gulp创建一个任务
先在项目目录下创建一个gulpfils.js文件
然后倒入包
var gulp=require('gulp');//需要在本地安装gulp,然后就可以使用变量gulp调用包里面的函数
gulp.task("任务名字",任务要执行的操作,一般是函数,或者函数列表)
function(){}//相当于python里面的lambda匿名函数
gulp.task("love",function(){ console.log("I love you"); });
在gulpfile.js中实现上述任务,然后再命令行中执行,gulp +任务名,就会执行相应的任务
gulp love
安装时指定版本 npm install [email protected]
与3.9相比,gulp区别
1、普通函数完成后需要调用done函数,3.9匿名函数中没有参数,4.0参数为done函数,执行完普通逻辑后再手动执行done函数
2.watch任务中,监听到了文件的修改,需要执行某个依赖任务的时候,
3,在default任务中,bs和watch需要同时执行,因此需要使用函数gulp.parallel,bs任务就是对浏览器的监听和管理
4,gulp.serise函数和gulp.parallel一个是串行执行,一个是并行执行
gulp.cssnano任务对css文件进行压缩,需要安装插件
npm install gulp-cssnano --save-dev
dest==destnation目的地
gulp.src函数,搜索指定目录下的指定文件,类似于python中的os.walk
gulp.pipe管道函数,将上一步处理的结果接着进行处理,相当于linux中的管道操作|
gulp.rename重命名
gulp.dest,将文件移动到指定目录
定义一个对写好的css文件进行处理的任务
gulp.task("css",function(){
gulp.src(path+"*.css").pipe(gulp.cssnano()).pipe(gulp.rename(
{"suffix":".min"})).pipe(gulp.dest(destPath))
})
rename花括号中的参数表示重命名规则,上述规则表示在文件名后添加.min后缀
上述任务将指定文件夹下的css文件压缩重命名后放到指定目录中
需要学习一下rename里面的参数是什么意思??
需要安装插件gulp-rename
npm install gulp-rename --save-dev
对js文件进行处理
压缩工具,gulp-uglify
npm install gulp-uglify --save-dev
gulp.task("css",function(){
gulp.src(path+"*.css").pipe(gulp.cssnano()).pipe(gulp.rename(
{"suffix":".min"})).pipe(gulp.dest(destPath))
})
gulp.task("css",function(){
gulp.src(path+"*.js").pipe(gulp.uglify()).pipe(gulp.rename(
{"suffix":".min"})).pipe(gulp.dest(destPath))
})
注意对css文件压缩的是cssnano,对ja进行简化压缩的是uglify,可以在uglify中添加参数指定修改方式
gulp.task("css",function(){
gulp.src(path+"*.js").pipe(gulp.uglify({“toplevel”:true})).pipe(gulp.rename(
{"suffix":".min"})).pipe(gulp.dest(destPath))
})
加入toplevel:true对顶级变量进行处理
gulp.task("css",function(){
gulp.src(path+"*.js").pipe(gulp.uglify({“toplevel”:true,"compress":{"drop_console":true}})).pipe(gulp.rename(
{"suffix":".min"})).pipe(gulp.dest(destPath))
})
uglify项目和文档地址
GitHub - mishoo/UglifyJS: JavaScript parser / mangler / compressor / beautifier toolkit
合并多个文件
npm install gulp-concat --save-dev
gulp.task("css",function(){
gulp.src(path+"*.js").pipe(gulp.uglify({“toplevel”:true,"compress":{"drop_console":true}})).pipe(gulp.rename(
{"suffix":".min"})).pipe(gulp.concat()).pipe(gulp.dest(destPath))
})
压缩图片
npm install gulp-imagemin
npm install gulp-cache
var cache=require("gulp-cache");
var imagemin=require("gulp-imagemin")
imagemin是无损的情况下压缩图片,cache是保证压缩过得图片不再压缩
gulp.task("image",function(){
gulp.src(path+"*.*").pipe(cache(imagemin())).pipe(gulp.dest(destpath))
});
监听问价修改,自动刷新浏览器
监听不需要第三方插件,直接使用gulp.watch()函数就可以
监听文件修改后自动执行任务
gulp.task("watch",function(){
gulp.watch("./css/*.css",["css"])//监听css文件下的所有以css为后缀的文件,有修改时自动执行中括号内的名字为css的任务
})
浏览器自动监听
npm install browser-sync --save-dev
var bs=require("browser-sync").create();内容修改后浏览器自动刷新
gulp.task("bs",function(){
bs.init({
"server":{
"baseDir":"./"
}
})
});
在css,js等任务后面加上pipe(bs.stream()),有修改后就刷星浏览器
gulp.task("css",function(){
gulp.src(path+"*.js").pipe(gulp.uglify({“toplevel”:true,"compress":{"drop_console":true}})).pipe(gulp.rename(
{"suffix":".min"})).pipe(gulp.concat()).pipe(gulp.dest(destPath).pipe( bs.stream() ))
})
如果命令行窗口gulp后面不指定任务名,则自动执行名字为“default”的任务
gulp文档地址
www.browsersync.cn/