我想下载一个视频流,并想将它们保存到本地存储与单个包作为MP4。
作为视频流的块的.ts文件的所有信息都保存到一个名为info_media.m3u8的文件中,.m3u8的外观如下所示:
#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
请帮我下载这些文件。带代码的答案真的很受欢迎。
发布于 2018-08-29 09:00:50
使用FFmpeg
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是要保存的文件路径。
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的示例
发布于 2021-07-03 18:19:14
运行此命令很简单,然后只需等待完成流:
ffmpeg -i https://server.mine.it/video_id.m3u8 -c copy -bsf:a aac_adtstoasc output.mp4这是FFMPEG为你做的!
https://stackoverflow.com/questions/51974318
复制相似问题