【问题标题】:How to download and decrypt HTTP Live Streaming (HLS) videos in iOS?如何在 iOS 中下载和解密 HTTP Live Streaming (HLS) 视频?
【发布时间】:2016-11-06 03:59:06
【问题描述】:

我想下载 M3U8 文件块 (HLS) 并存储该视频(解密后)以供以后查看。我做了一个演示来播放 M3U8 文件,但我想下载视频数据以供以后查看。

【问题讨论】:

  • 你如何播放 HLS 流?带有普通<video> 标签的浏览器内?
  • 我在 AVPlayer 中玩 HLS
  • 您在哪一步遇到问题?您需要下载视频数据,使用解密密钥对其进行解密并将生成的数据保存到文件中。或者您在播放生成的文件时遇到问题?
  • 我无法下载 M3U8 文件数据。但是,我的要求现在改变了。将下载 MP4 供以后查看。而在流式传输的情况下,需要在 iOS 端播放加密的 HLS。如何在 iOS 上播放加密的 HLS?
  • @NSPratik,谢谢回答。我找到了这个github.com/kencool/KSHLSPlayer 看起来有人可以从流中存储视频。我正在尝试编译并检查它。也许它会很有用。

标签: ios http-live-streaming m3u8 m3u


【解决方案1】:

您可以使用ffmpeg 下载和解码HTTP-LS 流:

ffmpeg -i http://example.org/playlist.m3u8 -c copy -bsf:a aac_adtstoasc output.mp4

有一个iOS version of ffmpeg 可用。

【讨论】:

  • 我不得不添加-protocol_whitelist "file,http,https,tcp,tls",因为我看到了Protocol 'https' not on whitelist。总的来说,这是我需要的命令。谢谢!
【解决方案2】:

这个 Perl 脚本是一个很好的提取器:https://github.com/osklil/hls-fetch

步骤:

wget https://raw.githubusercontent.com/osklil/hls-fetch/master/hls-fetch
chmod +x hls_fetch
./hls_fetch --playlist "THE_URL"

THE_URL 替换为您的 M3U8 播放列表的完整 URL(或尝试使用 --help 的其他选项)。

奖励:如果您缺少 Perl 的 JSON 模块(就像我一样),只需运行 sudo cpan JSON

【讨论】:

  • $ ./hls-fetch --help 在@INC 中找不到JSON.pm(您可能需要安装JSON 模块)(@INC 包含:/home/valya/perl5/lib /perl5 /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) 在 ./hls-fetch 第 24 行。开始失败——编译在 ./hls-fetch 第 24 行中止。
  • @Lebnik 你读过我关于安装缺少的 JSON 模块的额外提示吗?
【解决方案3】:

还有一个 Chrome 扩展程序可以从 m3u8 块制作整个视频,这是链接 HLS Video Saver

【讨论】:

    【解决方案4】:

    从 iOS 10 开始,您可以使用 AVFoundation 将 HTTP Live Streaming (HLS) 资产下载到 iOS 设备。

    https://developer.apple.com/documentation/avfoundation/media_assets_playback_and_editing/asset_manipulation/downloading_and_playing_offline_http_live_streaming_content?changes=_4

    或者使用这个 git:HLSion

    【讨论】:

      【解决方案5】:

      网址:https://mnmedias.api.telequebec.tv/m3u8/29880.m3u8

      步骤 1:ffmpeg -i 'https://mnmedias.api.telquebec.tv/m3u8/29880.m3u8' -vf scale=w=1280:h=720:force_original_aspect_ratio=decrease -c:a aac - ar 48000 -b:a 128k -c:v h264 -profile:v main -crf 20 -g 48 -keyint_min 48 -sc_threshold 0 -b:v 2500k -maxrate 2675k -bufsize 3750k -hls_time 10 -hls_playlist_type vod -hls_segment_filename my_hls_video/ 720p_%03d.ts my_hls_video/720p.m3u8

      第二步:

      -i 'https://mnmedias.api.telquebec.tv/m3u8/29880.m3u8' :=> 设置https://mnmedias.api.telequebec.tv/m3u8/29880.m3u8 为视频源。

      -vf "比例=w=1280:h=720:force_original_aspect_ratio=decrease" :=> 将视频缩放到 1280x720 内的最大可能值,同时保持纵横比

      -c:a aac -ar 48000 -b:a 128k :=> 将音频编解码器设置为 AAC,采样率为 48kHz,比特率为 128k

      -c:v h264 :=> 将视频编解码器设置为 H264,这是 HLS 段的标准编解码器

      -profile:v 主要 :=> 将 H264 配置文件设置为主 - 这意味着在现代设备中的支持阅读更多

      -crf 20 :=> 恒定速率因子,整体质量的高水平因子

      -g 48 -keyint_min 48 :=> 重要的是每 48 帧(~2 秒)创建关键帧(I 帧) - 稍后会影响片段的正确切片和再现的对齐

      -sc_threshold 0 :=> 不要在场景变化时创建关键帧 - 仅根据 -g

      -b:v 2500k -maxrate 2675k -bufsize 3750k :=> 限制视频比特率,这些是特定于再现的,取决于您的内容类型 - 阅读更多

      -hls_time 4 : :=> 分段目标持续时间(以秒为单位) - 实际长度受关键帧限制

      -hls_playlist_type 点播 :=> Sdds #EXT-X-PLAYLIST-TYPE:VOD 标签并将所有片段保留在播放列表中

      -hls_segment_filename beach/720p_%03d.ts :=> - 显式定义段文件名 my_hls_video/720p.m3u8 - 播放列表文件的路径 - 也告诉 ffmpeg 输出 HLS (.m3u8)

      【讨论】:

        猜你喜欢
        • 2017-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-12
        • 2016-06-01
        • 2011-05-02
        • 2015-05-27
        • 1970-01-01
        相关资源
        最近更新 更多