From 922ca4cbdd3bc3c8cef996a97e1e1ea98a6b9ae3 Mon Sep 17 00:00:00 2001 From: orestonce Date: Sat, 23 Jul 2022 11:21:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0gomedia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- download.go | 2 +- export/main.go | 10 ++++++++-- go.mod | 2 +- go.sum | 4 ++-- m3u8d-qt/screenshot.png | Bin 9535 -> 8440 bytes m3u8d-qt/version.rc | 6 +++--- merge.go | 30 +++++++++++++++++++++++++----- 8 files changed, 41 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index c3d7428..4bcc94f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ * 没有ffmpeg依赖, 不需要单独配置任何环境 * 提供windows图形界面(Qt), mac、linux命令行, linux支持arm、386、mipsle * 程序会自动将下载的ts文件合并转换格式为mp4 -* windows自带GUI界面的版本下载: [m3u8d_qt_v1.5.4_windows_amd64.exe](https://github.com/orestonce/m3u8d/releases/download/v1.5.4/m3u8d_qt_v1.5.4_windows_amd64.exe): +* windows自带GUI界面的版本下载: [m3u8d_qt_v1.5.5_windows_amd64.exe](https://github.com/orestonce/m3u8d/releases/download/v1.5.5/m3u8d_qt_v1.5.5_windows_amd64.exe): ![](m3u8d-qt/screenshot.png) * 全部版本下载, 包括windows图形界面/linux命令行/mac命令行: https://github.com/orestonce/m3u8d/releases * linux/mac版的命令行使用教程 diff --git a/download.go b/download.go index 6045dec..2748094 100644 --- a/download.go +++ b/download.go @@ -201,7 +201,7 @@ func (this *downloadEnv) RunDownload(req RunDownload_Req) (resp RunDownload_Resp err = MergeTsFileListToSingleMp4(MergeTsFileListToSingleMp4_Req{ TsFileList: tsFileList, OutputMp4: tmpOutputName, - ctx: this.ctx, + Ctx: this.ctx, }) if err != nil { resp.ErrMsg = "合并错误: " + err.Error() diff --git a/export/main.go b/export/main.go index b330bf6..5c0c07b 100644 --- a/export/main.go +++ b/export/main.go @@ -13,7 +13,7 @@ import ( "strings" ) -const version = "1.5.4" +const version = "1.5.5" func main() { BuildCliBinary() // 编译二进制 @@ -29,6 +29,7 @@ func BuildCliBinary() { type buildCfg struct { GOOS string GOARCH string + Ext string } var list = []buildCfg{ { @@ -47,9 +48,14 @@ func BuildCliBinary() { GOOS: "darwin", GOARCH: "amd64", }, + { + GOOS: "windows", + GOARCH: "386", + Ext: ".exe", + }, } for _, cfg := range list { - name := "m3u8d_cli_v" + version + "_" + cfg.GOOS + "_" + cfg.GOARCH + name := "m3u8d_cli_v" + version + "_" + cfg.GOOS + "_" + cfg.GOARCH + cfg.Ext cmd := exec.Command("go", "build", "-trimpath", "-ldflags", "-s -w", "-o", filepath.Join(wd, "bin", name)) cmd.Dir = filepath.Join(wd, "cmd") cmd.Env = append(os.Environ(), "GOOS="+cfg.GOOS) diff --git a/go.mod b/go.mod index 1749dc8..3db95a3 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/orestonce/go2cpp v0.0.0-20220704224208-2d58769247a4 github.com/orestonce/gopool v0.0.0-20220508090328-d7d56d45b171 github.com/spf13/cobra v1.4.0 - github.com/yapingcat/gomedia v0.0.0-20220717141418-916ca463aae9 + github.com/yapingcat/gomedia v0.0.0-20220721095559-a283c87d8a0b golang.org/x/net v0.0.0-20220617184016-355a448f1bc9 golang.org/x/text v0.3.7 ) diff --git a/go.sum b/go.sum index 4bb9fa8..ee7751c 100644 --- a/go.sum +++ b/go.sum @@ -12,8 +12,8 @@ github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/yapingcat/gomedia v0.0.0-20220717141418-916ca463aae9 h1:iIeMJO+oyppY4ggENbLREBYro32NnTp5mgMEZRqpXNs= -github.com/yapingcat/gomedia v0.0.0-20220717141418-916ca463aae9/go.mod h1:WSZ59bidJOO40JSJmLqlkBJrjZCtjbKKkygEMfzY/kc= +github.com/yapingcat/gomedia v0.0.0-20220721095559-a283c87d8a0b h1:ugQfEkchgCe+MBtP/Ih+ypTr1WhlcTHahnIDrS1GXoo= +github.com/yapingcat/gomedia v0.0.0-20220721095559-a283c87d8a0b/go.mod h1:WSZ59bidJOO40JSJmLqlkBJrjZCtjbKKkygEMfzY/kc= golang.org/x/net v0.0.0-20220617184016-355a448f1bc9 h1:Yqz/iviulwKwAREEeUd3nbBFn0XuyJqkoft2IlrvOhc= golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/m3u8d-qt/screenshot.png b/m3u8d-qt/screenshot.png index 605605217b34784ad88da05b5d25c7663d2b7839..65c32a54b7b56ea0c3ac085be887c8616317b1ed 100644 GIT binary patch literal 8440 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 diff --git a/m3u8d-qt/version.rc b/m3u8d-qt/version.rc index 28373d6..b8c687d 100644 --- a/m3u8d-qt/version.rc +++ b/m3u8d-qt/version.rc @@ -7,8 +7,8 @@ IDI_ICON1 ICON "favicon.ico" #endif VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,5,4,0 - PRODUCTVERSION 1,5,4,0 + FILEVERSION 1,5,5,0 + PRODUCTVERSION 1,5,5,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS VS_FF_DEBUG @@ -23,7 +23,7 @@ VS_VERSION_INFO VERSIONINFO BEGIN BLOCK "080404b0" BEGIN - VALUE "ProductVersion", "1.5.4.0\0" + VALUE "ProductVersion", "1.5.5.0\0" VALUE "ProductName", "m3u8Ƶع\0" VALUE "LegalCopyright", "https://github.com/orestonce/m3u8d\0" VALUE "FileDescription", "m3u8Ƶع\0" diff --git a/merge.go b/merge.go index c17b1c4..f5afaaa 100644 --- a/merge.go +++ b/merge.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "errors" + "github.com/yapingcat/gomedia/codec" "github.com/yapingcat/gomedia/mp4" "github.com/yapingcat/gomedia/mpeg2" "io/ioutil" @@ -14,7 +15,7 @@ import ( type MergeTsFileListToSingleMp4_Req struct { TsFileList []string OutputMp4 string - ctx context.Context + Ctx context.Context } func MergeTsFileListToSingleMp4(req MergeTsFileListToSingleMp4_Req) (err error) { @@ -33,23 +34,42 @@ func MergeTsFileListToSingleMp4(req MergeTsFileListToSingleMp4_Req) (err error) demuxer := mpeg2.NewTSDemuxer() var OnFrameErr error + var audioTimestamp uint64 = 0 + aacSampleRate := -1 demuxer.OnFrame = func(cid mpeg2.TS_STREAM_TYPE, frame []byte, pts uint64, dts uint64) { if OnFrameErr != nil { return } if cid == mpeg2.TS_STREAM_AAC { - OnFrameErr = muxer.Write(atid, frame, pts, dts) + codec.SplitAACFrame(frame, func(aac []byte) { + if aacSampleRate == -1 { + adts := codec.NewAdtsFrameHeader() + adts.Decode(aac) + aacSampleRate = codec.AACSampleIdxToSample(int(adts.Fix_Header.Sampling_frequency_index)) + } + err = muxer.Write(atid, aac, audioTimestamp, audioTimestamp) + audioTimestamp += uint64(1024 * 1000 / aacSampleRate) //每帧aac采样固定为1024。aac_sampleRate 为采样率 + if err != nil { + OnFrameErr = err + return + } + }) } else if cid == mpeg2.TS_STREAM_H264 { - OnFrameErr = muxer.Write(vtid, frame, pts, dts) + err = muxer.Write(vtid, frame, uint64(pts), uint64(dts)) + if err != nil { + OnFrameErr = err + return + } } else { OnFrameErr = errors.New("unknown cid " + strconv.Itoa(int(cid))) + return } } for idx, tsFile := range req.TsFileList { select { - case <-req.ctx.Done(): - return req.ctx.Err() + case <-req.Ctx.Done(): + return req.Ctx.Err() default: } DrawProgressBar(len(req.TsFileList), idx)