如何下载和解密 iOS 中的 HTTP 直播流 (HLS) 视频?

How to download and decrypt HTTP Live Streaming (HLS) videos in iOS?

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

还有一个 Chrome 扩展,可以从 m3u8 块制作整个视频,这里是 link HLS Video Saver

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

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

iOS version of ffmpeg 个可用。

这个 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.

从 iOS 10 开始,您可以使用 AVFoundation 将 HTTP 直播流 (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

url: https://mnmedias.api.telequebec.tv/m3u8/29880.m3u8

第一步:ffmpeg -i 'https://mnmedias.api.telequebec.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 视频点播-hls_segment_filename my_hls_video/720p_%03d.ts my_hls_video/720p.m3u8

第 2 步:

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

-vf "比例=w=1280:h=720:force_original_aspect_ratio=减少" :=> 在保持宽高比的同时将视频缩放到 1280x720 范围内的最大可能

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

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

-profile:v main :=> 将 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 : :=> Segment target duration in seconds - 实际长度受关键帧限制

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

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

我刚刚按照教程 https://www.oneminuteinfo.com/2016/10/download-ts-files-and-convert-to-mp4.html 尝试从某个 https .m3u8 文件下载视频并且成功了。 Chrome 插件或 ffmpeg 中的 None 对我有用。