最新要闻
- 从三岁到八十二岁的武则天(转载)---王晓磊著 之简介|每日视讯
- 现场视频可怕!四川一特斯拉撞飞路人致身亡:被撞者腾空而起-热门
- 6月1日开市!大观园早市回来啦
- 全球视讯!69㎡三房,72㎡四房,广州的户型都卷成这样了?
- 蛋白质纳米“计算机”问世:未来有望治疗癌症
- 贾跃亭造车梦成 李想:理想很多优秀负责人都来自法拉第未来 当前信息
- 快看:高颜值更有强悍性能 超频可解锁200W!影驰RTX 4060 Ti星曜OC显卡评测
- 砸手里了!推特估值大减:只剩马斯克收购价三分之一
- 马斯克高调收购“看走眼”?Twitter最新估值大跌近70%_世界时快讯
- 火狐也将放弃旧平台:Firefox 115将是支持Win7/8.1最后版本
- 环球快消息!福星股份董秘回复:截止5月29日公司股东人数约为5.48万
- 仓网升级,链通全国 顺丰供应链为小米打造原料央仓
- 性能超苹果A17 天玑9300卷出新高度:4个X4超大核详细规格出炉
- 【新视野】捷克一女婴出生2天就被母亲打耳洞 妈妈:应该是不疼的
- 微星发布全新Z790系主板:首次支持Wi-Fi 7 及5千兆网卡 世界热消息
- 又稳又圆 比亚迪仰望U8原地掉头为何这么慢?比快更难实现!
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
每日资讯:基于 Web 实现 m3u8 视频播放的简单应用示例
基于 Web 实现 m3u8 视频播放的简单应用示例
实现思路
将视频(MP4 等)转换为 M3U8 视频的服务,可以按照以下步骤进行操作:
【资料图】
将视频(MP4 等)转换为 M3U8:在服务中,使用适当的工具(如 FFmpeg)将接收到的视频(MP4 等)转换为 M3U8 格式。这将生成一个包含视频流的 M3U8 文件以及相应的分段(TS)文件。
提供边下边播服务:将生成的 M3U8 文件和分段文件存储在适当的位置(如服务器上的文件夹或云存储服务中)。然后,可以通过将这些文件的 URL 提供给前端,使前端能够通过边下边播的方式逐段加载和播放视频。
前端实现 M3U8 播放器:在前端,可以使用现有的视频播放器库(如 video.js、plyr.js 等)或基于 HLS(HTTP Live Streaming)协议的播放器库(如 hls.js)来实现 M3U8 视频的播放器。这些库可以通过提供 M3U8 文件的 URL 来加载和播放视频。
一、将视频(MP4 等)转换为 M3U8 视频
使用 Python 实现将 MP4 视频转换为 M3U8 视频,按照以下步骤进行操作:
- 安装所需的库:首先,确保已安装所需的库。在 Python 中,可以使用
ffmpeg-python库来与 FFmpeg 进行交互,以执行视频转换操作。可以使用以下命令安装该库:
pip install ffmpeg-python- 导入库和设置转换函数:在 Python 代码中,导入
ffmpeg模块,并创建一个函数,用于将 MP4 转换为 M3U8。以下是一个示例代码:
import ffmpegdef convert_mp4_to_m3u8(input_file, output_file): """ Converts an MP4 file to an M3U8 file using ffmpeg. Args: input_file (str): The path to the input MP4 file. output_file (str): The path to the output M3U8 file. Returns: bool: True if the conversion was successful, False otherwise. """ try: ffmpeg.input(input_file).output(output_file, format="hls", hls_time=10, hls_segment_type="mpegts").run() return True except ffmpeg.Error as e: print(f"An error occurred during video conversion: {e.stderr}") return False在这个示例代码中,convert_mp4_to_m3u8函数接受输入文件路径和输出文件路径作为参数。它使用 FFmpeg 将输入文件转换为 M3U8 格式,并将分段(TS)文件输出到指定的输出文件路径。
二、实现 HTTP 服务器,提供 M3U8 视频的访问
方法一、使用 Python 标准库中的 http.server模块
这个模块提供了一个简单的 HTTP 服务器,可以处理 GET 和 HEAD 请求,并可以为客户端提供静态文件。
以下是一个简单的示例代码,可以启动一个 HTTP 服务器并为客户端提供视频等资源的访问:
import http.serverimport socketserverPORT = 8000Handler = http.server.SimpleHTTPRequestHandlerwith socketserver.TCPServer(("", PORT), Handler) as httpd: print("serving at port", PORT) httpd.serve_forever()在这个示例中,创建了一个 http.server.SimpleHTTPRequestHandler处理程序,它可以处理 GET 和 HEAD 请求,并可以为客户端提供静态文件。然后,使用 socketserver.TCPServer创建一个 TCP 服务器,并将处理程序传递给它。最后,调用 serve_forever()方法开始监听来自客户端的请求。
将视频等资源放在服务器的根目录下,例如 ./video.m3u8,客户端可以通过浏览器访问 http://localhost:8000/video.m3u8来获取该资源。客户端也可以使用其他 HTTP 客户端程序(例如 curl或者 wget)来访问资源。
不过需要注意的是,这种方式只适合提供小型的静态文件。如果要提供大型视频等资源,最好使用专门的服务器软件来处理,例如 Apache 或 Nginx。
方法二、使用 Flask 框架
Flask 框架可以提供一种更为灵活的方式来实现视频等静态资源的访问。下面是一个简单的示例代码:
from flask import Flask, send_from_directoryapp = Flask(__name__)@app.route("/")def static_file(path): return send_from_directory(".", path)if __name__ == "__main__": app.run(port=8000) 在这个示例中,定义了一个名为 static_file的路由,它可以处理所有的 HTTP GET 请求,并使用 send_from_directory函数返回请求的文件。在这里,将请求的文件从当前目录中返回。如果要返回其他目录下的文件,可以将 send_from_directory函数的第一个参数设置为目录的路径。
要访问视频等静态资源,可以将它们放在与 Flask 应用程序相同的目录中,并使用相对路径作为 URL。例如,如果视频文件名为 video.m3u8,可以使用 http://localhost:8000/video.m3u8访问该文件。
需要注意的是,这种方式也适用于小型的静态文件。如果要提供大型视频等资源,最好使用专门的服务器软件来处理,例如 Apache 或 Nginx。另外,这里的示例代码只提供了最简单的静态资源访问功能,如果需要更高级的功能(例如缓存控制、安全性等),可以使用 Flask 扩展或者在代码中自行实现。
三、Web 前端播放 M3U8 视频
M3U8 是一种基于 HTTP Live Streaming (HLS) 协议的视频流播放格式(在播放 M3U8 文件时需要将视频文件和 M3U8 文件都放在 HTTP 服务器上,并通过 HTTP 协议进行访问)。要在 Web 前端中实现 M3U8 播放器,可以使用一些开源的 JavaScript 库,例如 hls.js和 video.js。
hls.js是一个基于 JavaScript 实现的 M3U8 播放器库。它可以自动检测浏览器是否支持 HLS,如果不支持则使用 Flash 播放器来进行播放。以下是一个使用 hls.js的示例代码:
hls.js player example <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script> <script> var video = document.getElementById("video"); if (Hls.isSupported()) { var hls = new Hls(); hls.loadSource("http://127.0.0.1:8000/path/to/video.m3u8"); hls.attachMedia(video); hls.on(Hls.Events.MANIFEST_PARSED, function () { // video.play(); }); } else if (video.canPlayType("application/vnd.apple.mpegurl")) { video.src = "http://127.0.0.1:8000/path/to/video.m3u8"; video.addEventListener("loadedmetadata", function () { // video.play(); }); } </script> 在这个示例中,首先��页面中引入了 hls.js库。然后,创建一个 HTML5 video元素,并为它设置了 controls属性,以便用户可以控制视频的播放。
接着,使用 Hls.isSupported()方法检测浏览器是否支持 HLS。如果支持,则创建一个 Hls对象,并使用 loadSource方法加载 M3U8 文件。然后,使用 attachMedia方法将 video元素附加到 Hls对象上,并在 MANIFEST_PARSED事件触发时开始播放视频。
如果浏览器不支持 HLS,就检测是否支持 application/vnd.apple.mpegurl格式。如果支持,则为 video元素的 src属性设置 M3U8 文件的路径,并在 loadedmetadata事件触发时开始播放视频。
除了 hls.js,还有一些其他的 JavaScript 库可以用来实现 M3U8 播放器,例如 video.js。下面是一个使用 video.js的示例代码:
video.js player example <script src="https://vjs.zencdn.net/8.3.0/video.min.js"></script> <script> var video = videojs("video", { techOrder: ["html5", "flash"], sources: [ { src: "http://127.0.0.1:8000/path/to/video.m3u8", type: "application/x-mpegURL", }, ], }); // video.play(); </script> 在这个示例中,首先引入了 video.js的 CSS 和 JavaScript 文件。然后,创建了一个 HTML5 video元素,并为它设置了 class属性,以便应用 video.js的默认样式。
接着,使用 videojs函数创建一个 video.js对象,并为其指定了 techOrder和 sources选项。techOrder选项指定了播放视频时使用的技术顺序,如果浏览器不支持 HLS,则会使用 Flash 播放器来进行播放。sources选项指定了待播放的 M3U8 文件的路径和类型。
最后,调用 play方法开始播放视频。
关键词:
-
-
【经验分享】锐捷EVE在火狐游览器中,取消一律打开此应用的选项,重新选择默认打开应用,如SecureCRT-动态焦点
环境:>工具:锐捷EVE模拟器,火狐游览器,SecureCRT_8 7系统版本:Windows10 需求描述:>描述:在选择一
来源: -
当前讯息:淘宝太细了:mysql 和 es 的5个一致性方案,你知道吗?
文章很长,且持续更新,建议收藏起来,慢慢读---王晓磊著 之简介|每日视讯
现场视频可怕!四川一特斯拉撞飞路人致身亡:被撞者腾空而起-热门
6月1日开市!大观园早市回来啦
全球视讯!69㎡三房,72㎡四房,广州的户型都卷成这样了?
可视化探索开源项目的 contributor 关系 环球最新
蛋白质纳米“计算机”问世:未来有望治疗癌症
贾跃亭造车梦成 李想:理想很多优秀负责人都来自法拉第未来 当前信息
快看:高颜值更有强悍性能 超频可解锁200W!影驰RTX 4060 Ti星曜OC显卡评测
砸手里了!推特估值大减:只剩马斯克收购价三分之一
马斯克高调收购“看走眼”?Twitter最新估值大跌近70%_世界时快讯
火狐也将放弃旧平台:Firefox 115将是支持Win7/8.1最后版本
环球新动态:MySQL之DDL表创建及DML数据处理操作
今日视点:直播软件源码,审核的“中坚力量”鉴黄功能!
环球快消息!福星股份董秘回复:截止5月29日公司股东人数约为5.48万
仓网升级,链通全国 顺丰供应链为小米打造原料央仓
性能超苹果A17 天玑9300卷出新高度:4个X4超大核详细规格出炉
【新视野】捷克一女婴出生2天就被母亲打耳洞 妈妈:应该是不疼的
微星发布全新Z790系主板:首次支持Wi-Fi 7 及5千兆网卡 世界热消息
又稳又圆 比亚迪仰望U8原地掉头为何这么慢?比快更难实现!
肯德基麦当劳儿童节玩具断货:黄牛线上倒卖 焦点热门
猛打价格战,手术机器人市场要变天了
柏子滋心丸怎么样
稳增长政策接续发力预期升温 每日快讯
国内新一轮油价调整6月13日开启!大概率还是上涨
1599元 雷蛇战锤狂鲨专业极速版耳机发布:蓝牙、2.4GHz双模连接 焦点报道
天天新动态:《暗黑破坏神4》部分皮肤需氪金28刀 但不影响游玩
今天是世界无烟日 专家:电子烟同样有害健康 世界微头条
官方回应广东汕尾海滩突现百米生蚝带:建议尽量不要食用
JS的严格模式 天天日报
会流程图却不会UML活动图?活动图深度剖析,就怕你学不会! 世界快资讯
广西融安县市场监管局开展专项检查守护“美丽经济” 天天观点
旧了也是香饽饽!iPhone二手受追捧:保值好、iOS流畅、苹果够大牌 全球观察
每日速看!曾被认为女版乔布斯!“滴血验癌”创始人入狱:被判11年
杭州被赖车司机称将起诉两名乘客!超24小时不下车 被行拘
火狐也将放弃旧平台:Firefox 115将是支持Win7/8.1最后版本
一洗脸就进水:女子3千割眼袋3个月眼睛闭不合 医生提醒爱美要适当
深圳最好的医院是哪个医院正规_深圳最好的医院
张青松出席东亚及太平洋 中央银行行长会议组织 第64届副手会暨第33届 货币与金融稳定委员会会议_看点
今日热文:keycloak~自定义登出接口
快播:Blazor 跨平台的、共享一套UI的天气预报 Demo
天天热资讯!Linux中设置’sudo’的10个小技巧
广西启用上线一批机构编制和绩效管理信息化应用成果_今日视点
微软-动视收购案夏季听证
你能接受调休吗?2023年端午节放3天后连上6天:高速不免费
4块RTX 4090显卡都够用 全汉ATX 3.0电源上新:2500W功率
环球看热讯:达实智能05月30日获深股通增持251.81万股
近九成债基今年以来收益为正 股债市场“跷跷板”效应显现
【看新股】10家拟上市银行更新业绩数据:湖北银行增长较快 药都银行不良率居首
国产显卡已追上RTX 3060 英伟达黄仁勋发声:不能轻视
环球最资讯丨6月6日开售 国服暴雪让谁来接盘!《暗黑4》媒体口碑解禁 值得一玩
世界观焦点:618白菜价 国产32GB DDR4内存杀到329元(三星颗粒+XMP超频)
顶配1999元!卢伟冰:Redmi Note 12T Pro卖的很好 很多人钟爱LCD 当前速读
简讯:全球最高芯片公司!英伟达市值突破万亿美元 GPU无敌:Intel的CPU再见
环球看热讯:ps中怎么画矩形框(ps画矩形框的操作方法)
读数据压缩入门笔记03_VLC
天天微动态丨业内人士:随着高估值隐忧基本出清 当前基础设施REITs具备较好的分红吸引力
【独家】神十六成功对接空间站组合体 太空中国人数量超越美国人
天天热讯:沙特、俄罗斯减产也没用?国际原油跌超4%:美国开始“耍赖”
世界通讯!林草碳汇政策划重点
【世界速看料】流媒体协议之RTMP详解20230513
字节狂问1小时,小伙offer到手,太狠了!(字节面试真题) 全球速读
kali-linux运行python脚本时出现”word unexpected (expecting ")")“错误的解决 热点聚焦
抄底信号?基金公司出手自购!投研人士:市场迎来左侧布局较好时点
广东汕尾海滩突现大量生蚝!官方回应:建议尽量不要吃
互联网大厂学会“放弃”:风吹过 摔不死 全跑了 环球要闻
中国人2030年前登陆月球!美国真急了
比亚迪给国产大飞机C919当引航车:国产致敬国产 比肩同行
小米汽车又有大料!博主直接实拍MS11实车 造型帅呆
慎言笃行怎么读(慎言)
乙肝表面抗体阳性是什么意思呀_乙肝表面抗体阳性是什么意思_当前信息
揭秘新疆棉背后的硬核高科技
国家发展改革委:5月30日24时起国内汽、柴油价格每吨分别提高100元和95元
汽车报道:特斯拉人才流失严重电池工程总监或另起炉灶 世界观天下
因夜间跳闸导致养猪场内空气不流通 造成5000头猪在高温下被闷死
日本专家三年研究表明 中学生入学得到手机或将导致脑力直接停滞在小学
冰淇淋已成为茅台产业生态中最具代表性前沿产品 未来加大研发新产品
《英雄联盟》外服宣布将在13.7版本后 停止支持32位Windows操作系统
意大利威尼斯主河道部分水域水体颜色变成荧光绿 改变原因暂不明确
大熊猫“园润”遭一男子泼水 成都大熊猫繁育研究基地禁止其入内
荆州海事局持续优化营商环境助力港航企业健康发展_每日关注
君主立宪制国家是什么意思(君主立宪制)-今热点
SD协议-基本概念
计算画布内旋转元素的边界坐标|今日视点
世界观焦点:售15.29-20.39万元 奇瑞瑞虎9正式上市
79888元!大疆空中电影机DJI Inspire 3正式开售_滚动
仅1399元!米家净水器600G发布:双芯7级精滤 母婴可直饮_世界播报
全球快报:工信部发布无线充电新规:手机等不能超80W
iOS网络数据指标收集
Java 集合类详解(一)_全球焦点
Java并发(七)----线程sleep、yield、线程优先级
即时设计—小组项目原型示例(附AI功能)
周二银行间回购定盘利率涨跌互现(05-30)
荣耀90系列发布:两款机型详解-世界快报
玩家在《塞尔达传说:王国之泪》造出二极管!信息时代要来了 环球播资讯
商州一出村道路泥泞出行难,主管部门:将用卵石铺设