web播放m3u8文件且进行加密处理

准备工作

  1. 安装ffmpeg。
  2. 将一个mp4视频进行切片且对ts文件进行加密处理
生成加密用的 key文件(没有此命令需要安装)
openssl rand  16 > enc.key

生成iv
openssl rand -hex 16

新建一个文件 enc.keyinfo 内容格式如下:
Key URI  # enc.key的路径,使用http形式
Path to key file  # enc.key文件
IV  #  上面生成的iv

如
http://localhost/video/enc.key
enc.key
48c674428c1e719751565ad00fe24243

ffmpge命令:
ffmpeg -y -i test.mp4 
-hls_time 12        # 将test.mp4分割成每个小段多少秒
-hls_key_info_file enc.keyinfo 
-hls_playlist_type vod    # vod 是点播,表示PlayList不会变
-hls_segment_filename "file%d.ts"   #  每个小段的文件名
playlist.m3u8   #  生成的m3u8文件

前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>演示:HTML5点播m3u8(hls)格式视频</title>
<link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="css/demo.css">
<style>
</style>
</head>
<body>
<div class="container">
    <header>
        <div class="row">
            <div class="col-md-3 col-xs-12"><h1 class="logo"><a href="http://www.helloweba.net" title="返回helloweba首页">helloweba</a></h1></div>
            <div class="col-md-9 text-right"</div>
        </div>
    </header>
    <div class="row main">
        <div class="col-md-12">
            <div class="container" style="width: 96%; margin: 30px auto">
                <video id="video" controls loop="false" width="100%"></video>
            </div>
        </div>
    </div>
    <footer>
        <p>Powered by helloweba.net  允许转载、修改和使用本站的DEMO,但请注明出处:<a href="http://www.helloweba.net">www.helloweba.net</a></p>
    </footer>
</div>
<script src="hls.js"></script>

<script>
var video = document.getElementById('video');
  if(Hls.isSupported()) {
    var hls = new Hls();
    hls.loadSource('http://vfile1.grtn.cn/2019/1574/0031/1723/157400311723.ssm/157400311723.m3u8');
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED,function() {
      video.play();
  });
 }
</script>
</body>
</html>

项目demo地址:https://github.com/xiadk/dk-hls 其中jiami是已经切分好的视频

注意项目一定要通过服务器打开,本地打开没用。

 

参考:
https://www.helloweba.net/javascript/571.html

https://www.cnblogs.com/codeAB/p/9184266.html

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: iOS开发可以使用AVPlayer来播放加密m3u8视频。首先,需要获取加密m3u8视频的URL地址。然后,可以使用AVAsset来创建一个播放资源对象,通过指定URL地址初始化AVURLAsset对象,如下所示: ``` NSURL *url = [NSURL URLWithString:@"加密m3u8视频的URL地址"]; AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil]; ``` 接下来,可以创建一个AVPlayerItem对象,将asset设置为其参数,用于加载加密m3u8视频资源。同时,需要为AVAsset设置相应的解密密钥,以解密加密m3u8视频,代码如下: ``` // 创建AVPlayerItem对象 AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset]; // 设置解密密钥,以解密加密m3u8视频 NSData *keyData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"密钥URL地址"]]; NSDictionary *encryptionInfo = @{AVAssetResourceLoadingRequestStreamingContentKeyRequestRequiresPersistentKey: @NO, AVAssetResourceLoadingRequestStreamingContentKeyRequestRequiresExternalization: @NO, AVAssetResourceLoadingRequestStreamingContentKeyRequestInitializationData: keyData}; [playerItem setExternalProtectionStatusDelegate:self queue:dispatch_get_main_queue()]; [playerItem setResourceLoaderDelegate:self queue:dispatch_get_main_queue()]; [playerItem setInitializationData: @[encryptionInfo] forAsset:asset]; ``` 最后,可以使用AVPlayer来播放加密m3u8视频,代码如下: ``` AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem]; AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player]; playerLayer.frame = self.view.bounds; [self.view.layer addSublayer:playerLayer]; [player play]; ``` 通过以上步骤,就可以在iOS开发中通过AVPlayer来播放加密m3u8视频。同时,还需要实现相关的代理方法来处理密钥请求和解密操作,以确保视频播放正常。 ### 回答2: iOS开发中,播放加密m3u8需要进行以下步骤。 首先,我们需要获取加密m3u8文件的url地址,并进行网络请求,获取到m3u8文件的内容。可以使用NSURLConnection或者NSURLSession来进行网络请求。 接下来,我们需要解析m3u8文件的内容,找到其中的加密信息。一般来说,加密信息是包含在EXT-X-KEY标签中的。可以使用正则表达式或者解析库来提取加密信息。 获取到加密信息之后,我们需要下载加密的密钥(key文件)。可以使用NSURLSession来进行密钥的网络请求,并将密钥保存到本地。 接着,我们需要将下载的加密的密钥设置到AVAssetResourceLoaderDelegate的代理方法中。通过实现AVAssetResourceLoaderDelegate的方法,我们可以对资源的请求进行拦截,并替换成解密后的数据。在这个方法中,我们需要解密每个ts文件的内容,然后将解密后的数据返回给播放进行播放。 最后,我们将解密后的数据传递给AVPlayer,用AVPlayer来进行播放。我们可以使用AVPlayerItem和AVPlayer来创建一个播放器,然后将解密后的数据设置给AVPlayerItem,最后将AVPlayerItem设置给AVPlayer。 综上所述,播放加密m3u8文件需要进行加密信息解析、密钥下载和解密处理等步骤。通过以上步骤,我们可以在iOS开发中实现播放加密m3u8文件的功能。 ### 回答3: iOS开发中要播放加密m3u8文件,可以借助AVFoundation框架来实现。以下是一个简单的实现步骤: 首先,需要将m3u8文件下载到本地,并解析得到m3u8文件中的密钥以及ts片段的URL。 然后,借助AVAssetResourceLoaderDelegate协议,自定义一个资源加载器,用于处理加密文件的逻辑。在该协议的代理方法中,先判断是否需要加载加密密钥,并根据m3u8文件中的密钥信息,将其加载到AVAssetResourceLoader中。 接下来,当AVPlayer需要加载排队的媒体数据时,资源加载器会被调用。在这个代理方法中,我们需要处理对ts片段的加载请求,通过AVAssetResourceLoadingDataRequest的requestRange属性可以得到要加载的范围,然后根据范围从本地缓存中读取对应的加密ts片段数据进行解密,再通过AVAssetResourceLoadingDataRequest的respond方法回传给AVPlayer。 最后,将AVPlayer与AVPlayerLayer绑定,通过AVPlayer的play方法来开始播放加密m3u8文件。 需要注意的是,由于涉及到解密操作,所以在自定义资源加载器中,我们需要实现对ts片段数据的解密逻辑,通常使用AES等加密算法进行解密。 综上所述,通过借助AVFoundation框架的AVAssetResourceLoaderDelegate协议和自定义资源加载器,我们可以实现在iOS开发中播放加密m3u8文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值