首页 > 编程知识 正文

python搭建流媒体服务器(ffmpeg中文开发手册)

时间:2023-05-04 00:21:51 阅读:73757 作者:243

基于fastapi的流媒体服务器1、后台2、准备3、代码1、前端代码与视频js 2、后端代码简单相关,与fastapi和ffmpeg操作3、结果说明4、说明1

一.背景

我们打算创建一个按需系统,主要功能是播放视频,但主要问题是视频流如何到达web端。 在MP4中传输整个文件可能会导致文件太大、加载太慢,或者流量占用太多,从而导致视频在中途直接关闭。

要解决此问题,请采用m3u8格式,将MP4视频切片并一次加载。

二、准备我准备了MP4视频花海. MP4。 没错,是rrdttt的《花海》。

要使用python3,版本3.7或更高版本必须支持asyncio模块,但还需要fastapi和ffmpy3模块

先看整个目录结构和内容,理论内容大家百度,说我也不知道,直接上代码。

其中html文件是前端、播放界面,py是服务端,huahai是存储介质的目录,MP4是我们的视频文件。

整个过程首先是将MP4生成为m3u8文件,然后打开api服务器,以便在前端进行长时间的访问。

三、代码1、前端代码,轻松参与视频js! doctypehtmlhtmlheadmetacharset=' utf-8 ' title文档标题/titlelinkhref=' https://cdnjs.cloud flare.com/Ajax/libs/video.video-js.min.CSS ' rel=' style sheet ' script src=' https://cdnjs.cloud flare.com/Ajax/libs/video.js/7.3.headbodydivvideoid=' example _ video ' class=' video-jsvjs-default-skin ' controls preload=' none ' poster=480 w _ 270 h _ 1c ' source src=' http://127.0.0.133605000 /视频/huu-source src=' c :/users/wyc/desktop/huahai.m3 u8 ' type=' application/x bodyscriptvarplayer=video js (example _ video ),{ muted: true,//静音控制loop /script/html 2、后端代码、轻松使用fastapi和ffmpeg importuvicornfromfastapiimportfastapi、 responsefromstarlette.responsesimportfileresponsefromfastapi.middleware.corsimportcorsmiddlewarefromffmpy3importfmpegimpegimp huahai.mp4': None}#配置命令outputs={ none : '-c : vlibx 264-c : aaac-strict-2-fsegment-segment _ TTT - segment _ list./huahai/huahai.m3 u8./huahai/huahai-m.ts ' } app=fastapi (origins=[ ' * ' ] # allow _ oo ) allow_headers=['*'],@app.get((/video/{filename} ) ) asyncdefvideo )响应, filename : str (: response.headers [ ' content-type ' ]=' application/x-mpegurl ' returnfileresponse ('./hhhheadere ) x-mpegurl ' returnfileresponse 652 filename=filename (#处理视频文件m3u8defChulivideo ) path ) : # )文件中包含ifno tos.path ' path ) 3360retuuth )判断是否存在的文件名ff=ffmpeg(inputs=inputs,outputs=outputs ) ff.run ) if _ name _==' ' port=5000,log_level='info ',reload=True,debug=True ) 3,结果说明处理后生成的文件

可见支持前端播放效果、慢载

服务器路由请求路径。 可以看到它一个个地加载

四、说明1、关于m3u8文件的生成和处理请看m3u8文件的内容。 各ts进行了处理,补充了完整的路线。 这是因为视频js在自动加载时基于m3u8的内容进行,并且不断读取ts路径。 也可以动态生成和修改此文件。 因为路线在开发中不确定。

2、ffmpeg命令补充outputs={ none : '-c : vlibx 264-c : aaac-strict-2-fsegment-segment _ time 10-segment _ 2 huahai.m3 u8./huahai/huahai-m.ts ' }上述代码主要考虑以下参数:

-segment_time在几秒钟内拆分

-segment_list_entry_prefix要附加在每个ts文件之前的字符串。 构成绝对路径

-segment_list输出的文件位置。 包含文件名

这个m是后缀,意思是4位数字,不足以补零

具体效果可以考虑huhai目录和里面的文件

3、关于fastapi跨域需要注意。 跨域问题尚未解决。 前端视频js报告错误。 打开浏览器的调整窗口就可以看到。

五、总结我在写本博客之前读了很多内容,很多都是理论上的,告诉大家可以用HLS实现,但是没有具体的实现方法,或者像爬虫一样得到m3u8的路径直接放入前端的视频js进行处理,现在给大家当然,后面还有很多工作要完善。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。