首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存HLS流?

保存HLS流?
EN

Stack Overflow用户
提问于 2018-08-23 04:04:09
回答 2查看 3.3K关注 0票数 2

我想下载一个视频流,并想将它们保存到本地存储与单个包作为MP4

作为视频流的块的.ts文件的所有信息都保存到一个名为info_media.m3u8的文件中,.m3u8的外观如下所示:

代码语言:javascript
复制
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:4.000,
VideoChunk_00001.ts
#EXTINF:4.000,
VudeoChunk_00002.ts
#EXTINF:4.000,
VideoChunk_00003.ts
#EXTINF:4.000,
VideoChunk_00004.ts
#EXTINF:4.000,
VideoChunk_00005.ts
#EXTINF:4.000,
...
#EXTINF:0.600,
master_Layer1_02150.ts
#EXT-X-ENDLIST 

现在我的问题和问题是如何准确地下载这些块?主.m3u8的URL类似于https://server.mine.it/video_id.m3u8,分块的URL类似于https://server.mine.it/videoid_videochunk_*.ts

请帮我下载这些文件。带代码的答案真的很受欢迎。

EN

回答 2

Stack Overflow用户

发布于 2018-08-29 09:00:50

使用FFmpeg

代码语言:javascript
复制
String cmd = String.format("-i %s -acodec %s -bsf:a aac_adtstoasc -vcodec %s %s", INPUT_FILE, "copy", "copy", dir.toString() + "/yourvideoname.mp4");
    String[] command = cmd.split(" ");
    execFFmpegBinary(command);

INPUT_FILE是您的目录url,而m3u8是要保存的文件路径。

代码语言:javascript
复制
   private void execFFmpegBinary(String[] command) {
    try {
        FFmpeg ffmpeg = FFmpeg.getInstance(MainActivity.this);
        ffmpeg.execute(command, new FFmpegExecuteResponseHandler() {
            @Override
            public void onSuccess(String message) {
                Log.i(TAG, "onSuccess: " + message);
                progressBar.dismiss();
            }

            @Override
            public void onProgress(String message) {
                Log.i(TAG, "onProgress: " + message);
                progressBar.setMessage("Progressing: \n " + message);
            }

            @Override
            public void onFailure(String message) {
                Log.i(TAG, "onFailure: " + message);
                progressBar.dismiss();
            }

            @Override
            public void onStart() {
                progressBar.show();
                Log.e("Time", System.currentTimeMillis()+"");
            }

            @Override
            public void onFinish() {
                progressBar.dismiss();
                Log.e("Time", System.currentTimeMillis()+"");
            }
        });
    } catch (FFmpegCommandAlreadyRunningException e) {
        e.printStackTrace();
    }
}

Here是来自github的示例

票数 2
EN

Stack Overflow用户

发布于 2021-07-03 18:19:14

运行此命令很简单,然后只需等待完成流:

代码语言:javascript
复制
ffmpeg -i https://server.mine.it/video_id.m3u8 -c copy -bsf:a aac_adtstoasc output.mp4

这是FFMPEG为你做的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51974318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档