M3U8在线播放

M3U8在线播放M3U8在线播放前言一、思路二、代码框架1.移动端适配2.改变M3U8地址3.设置videojs参数4.增加快进等功能写在最后前言当我们在网上愉快观影的时候,难免会遇到“M3U8格式”的视频。聪明的你应该也发现了,它是没办法直接播放的。它其实只是一个索引文件,根据它找到相应的.ts文件再进行播放。而这样做的好处,大概就是做多码率适配,保证视频播放的流畅性。有感兴趣的小伙伴可以参看这里—>M3U8文件格式。我今天要干的事情呢,就是解决当我们找到一个M3U8地址之后如何方便的播放它~一

大家好,又见面了,我是你们的朋友全栈君。

前言

当我们在网上愉快观影的时候,难免会遇到“M3U8格式”的视频。聪明的你应该也发现了,它是没办法直接播放的。它其实只是一个索引文件,根据它找到相应的.ts文件再进行播放。而这样做的好处,大概就是做多码率适配,保证视频播放的流畅性。有感兴趣的小伙伴可以参看这里—>M3U8文件格式。

我今天要干的事情呢,就是解决当我们找到一个M3U8地址之后如何方便的播放它~

一、思路

想要播放M3U8的方法有很多,比如浏览器插件 Native HLS PlayBack:
在这里插入图片描述
又比如现成的软件VLC播放器:
在这里插入图片描述
但是,这些都需要下载或者安装,当我换一个设备时就不是很方便嘛。于是,还有一种更好的方法:写一个M3U8在线播放的网站。
直接上图(分别为PC端和移动端):
M3U8在线播放网站-PC端
在这里插入图片描述

二、代码框架

利用js库videojs来对m3u8视频进行解析并播放。具体的代码,大家可以进去网站—>查看源码—>直接copy。
接下来主要是对其中涉及到的一些关键点进行说明,避免大家走弯路。

1. 移动端适配

为了使得网站在PC端和移动端都能很好地被展示,得在HTML中加入如下代码:

<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes" />

同时为了更好地区分出当前访问是移动端还是PC端,可以定义如下JS函数:

function IsPC(){ 
   
    var userAgentInfo = navigator.userAgent;
    var Agents = ["Android", "iPhone",
                "SymbianOS", "Windows Phone",
                "iPad", "iPod"];
    var flag = true;
    for (var v = 0; v < Agents.length; v++) { 
   
        if (userAgentInfo.indexOf(Agents[v]) > 0) { 
   
            flag = false;
            break;
        }
    }
    return flag;
}

2. 改变M3U8地址

通过在请求地址中加入一个play参数,“http://www.m3u8player.top/?play=xxxx.m3u8”来改变需要播放的m3u8地址。
在点击按钮后执行ChangeM3u8()函数,实现页面的跳转:

function ChangeM3u8(){ 
   
    var play = document.getElementById('video-url').value
    var url = location.href
    url = url.split('?')[0]+'?play='+play
    location.href = url
}

识别请求URL中的play参数:

function QueryString(qs){ 
   
    var url = location.href
    url = url.replace('?','?&').split('&')
    var re = ''
    for(var i=1;i < url.length;i++){ 
   
        if(url[i].indexOf(qs+'=')==0){ 
   
            re = url[i].replace(qs+'=','')
            break
        }
    }
    return re
}

3. 设置videojs参数

根据需要对videojs参数进行设置,如进度条、poster等:

var myVideo = videojs('myVideo',{ 
   
    bigPlayButton : true, 
    textTrackDisplay : false, 
    posterImage: false,
    errorDisplay : true,
    controlBar: { 
   volumePanel:{ 
   inline:false}},
    playbackRates: [0.5,1,1.25,1.5,2],
},function(){ 
   
    this.on('error',function(){ 
   
        myVideo.errorDisplay.close()
        alert('小主,地址解析错误≥﹏≤ \n 请检查链接是否正确')
    }) 
}
)

4. 增加快进等功能

为了使得网站可以通过键盘按键来对视频进行控制,如左右键控制视频前进后退,上下键控制音量大小,空格键控制视频播放暂停。我增加了键盘监听事件:

var vol = 0.1;  //1代表100%音量,每次增减0.1
var time = 10; //单位秒,每次增减10秒
document.onkeyup = function (event) { 
   //键盘事件
    var e = event || window.event || arguments.callee.caller.arguments[0];
    if (e && e.keyCode === 37) { 
   
        // 按 向左键
        c_time = myVideo.currentTime()
        if(c_time-time > 0){ 
   
            myVideo.currentTime(c_time-time)
        }else{ 
   
            myVideo.currentTime(0)
        }
        return false;
    }else if (e && e.keyCode === 39) { 
   
        // 按 向右键
        c_time = myVideo.currentTime()
        d_time = myVideo.duration();
        if(c_time+time > d_time){ 
   
            myVideo.currentTime(d_time)
        }else{ 
   
            myVideo.currentTime(c_time+time)
        }
        return false;
    }else if (e && e.keyCode === 38) { 
   
        // 按 向上键
        c_volume = myVideo.volume()
        if(c_volume+vol > 1){ 
   
            myVideo.volume(1)
        }else{ 
   
            myVideo.volume(c_volume+vol)
        }
        return false;
    }else if (e && e.keyCode === 40) { 
   
        // 按 向下键
        c_volume = myVideo.volume()
        if(c_volume-vol < 0){ 
   
            myVideo.volume(0)
        }else{ 
   
            myVideo.volume(c_volume-vol)
        }
        return false;
    }else if (e && e.keyCode === 32) { 
   
        // 按 空格键
        if (myVideo.paused()){ 
   
            myVideo.play()
        }else{ 
   
            myVideo.pause()
        }
        return false;
    }

}

写在最后

当然,还有许多东西可以做,可以去改进的。
所谓的“路遥遥其修远兮 吾将上下而求索”。

最后,感谢各位大大的耐心阅读~
慢着,大侠请留步… 动起可爱的双手,来个赞再走呗 (๑◕ܫ←๑)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147766.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • php将字符串内的指定字符全部替换,php中如何替换字符串中的某个字符[通俗易懂]

    php将字符串内的指定字符全部替换,php中如何替换字符串中的某个字符[通俗易懂]在PHP中,可以使用strtr()函数实现字符串替换。首先我们简单了解下strtr()函数的定义及语法。语法:stringstrtr(string$str,string$from,string$to)第一个参数表示待转换的字符串。第二个参数表示字符串中与将要被转换的目的字符to相对应的源字符。第三个参数表示字符串中与将要被转换的字符from相对应的目的字符。实例:…

    2022年5月23日
  • makefile 编译参数_gcc使用说明

    makefile 编译参数_gcc使用说明gcc编译源文件共有4个过程,预处理、编译、汇编、链接。预处理:命令:gcc-Etest.c-otest.i(-o后面指定生成文件的命名)过程:展开宏定义(#define),处理编译条件指令(#if#ifndef等),插入引用的头文件(#include),删除注释,添加行号和文件标识。结果:生成.i文件,一般的文本编辑器都能打开编译:命令:gcc-Ste…

    2022年10月13日
  • POJ 2208 已知边四面体六个长度,计算体积

    POJ 2208 已知边四面体六个长度,计算体积

    2022年1月6日
  • java队列(Queue)用法总结[通俗易懂]

    java队列(Queue)用法总结[通俗易懂]1.队列的特点队列是一种比较特殊的线性结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中最先插入的元素也将最先被删除,对应的最后插入的元素将最后被删除。因此队列又称为“先进先出”(FIFO—firstinfirstout)的线性表,与栈(FILO-firstinlastout)刚好相反…

    2022年7月14日
  • SAP Web IDE本地环境搭建「建议收藏」

    SAP Web IDE本地环境搭建「建议收藏」SAPWebIDE本地环境搭建1、JDK的安装及配置环境变量可通过官网自行下载JDK:JavaDownloads|Oracle直接傻瓜式安装至默认路径“C:\ProgramFiles\Java\jdk-17.0.2”,然后配置环境变量“JAVA_HOME”、“CLASSPATH”和“PATH”。JAVA_HOME:C:\ProgramFiles\Java\jdk-17.0.2CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\

    2022年10月18日
  • python光流法算法学习「建议收藏」

    python光流法算法学习「建议收藏」基于python-opencv程序对光流法的理解光流法的定义Lucas-Kanade光流原理Shi-Tomasi角点检测python-opencv代码demo光流法的定义光流法是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是由于场景…

    2022年7月23日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号