diff --git a/src/buffer.go b/src/buffer.go index 546a97b..5e7c053 100644 --- a/src/buffer.go +++ b/src/buffer.go @@ -213,7 +213,7 @@ func bufferingStream(playlistID, streamingURL, channelName string, w http.Respon case "xteve": go connectToStreamingServer(streamID, playlistID) case "ffmpeg", "vlc": - go bufferWithFfmpeg(streamID, playlistID) + go thirdPartyBuffer(streamID, playlistID) default: break @@ -1273,12 +1273,6 @@ func parseM3U8(stream *ThisStream) (err error) { break } - err := checkFile(stream.Folder + "remove") - if err == nil { - os.RemoveAll(stream.Folder) - break - } - } } @@ -1338,7 +1332,7 @@ func switchBandwidth(stream *ThisStream) (err error) { } // Buffer mit FFMPEG -func bufferWithFfmpeg(streamID int, playlistID string) { +func thirdPartyBuffer(streamID int, playlistID string) { if p, ok := BufferInformation.Load(playlistID); ok { @@ -1354,6 +1348,8 @@ func bufferWithFfmpeg(streamID int, playlistID string) { var tmpFolder = playlist.Streams[streamID].Folder var url = playlist.Streams[streamID].URL + stream.Status = false + bufferType = strings.ToUpper(Settings.Buffer) switch Settings.Buffer { @@ -1393,6 +1389,14 @@ func bufferWithFfmpeg(streamID int, playlistID string) { return } + err = checkFile(path) + if err != nil { + ShowError(err, 0) + addErrorToStream(err) + return + } + + showInfo(fmt.Sprintf("%s path:%s", bufferType, path)) showInfo("Streaming URL:" + stream.URL) var tmpFile = fmt.Sprintf("%s%d.ts", tmpFolder, tmpSegment) @@ -1435,6 +1439,7 @@ func bufferWithFfmpeg(streamID int, playlistID string) { } cmd.Start() + defer cmd.Wait() go func() { @@ -1444,7 +1449,7 @@ func bufferWithFfmpeg(streamID int, playlistID string) { for scanner.Scan() { - debug = fmt.Sprintf("%s:%s", bufferType, strings.TrimSpace(scanner.Text())) + debug = fmt.Sprintf("%s log:%s", bufferType, strings.TrimSpace(scanner.Text())) select { case <-streamStatus: @@ -1475,7 +1480,7 @@ func bufferWithFfmpeg(streamID int, playlistID string) { var timeout = 0 for { - time.Sleep(time.Duration(100) * time.Millisecond) + time.Sleep(time.Duration(1000) * time.Millisecond) timeout++ select { @@ -1545,9 +1550,11 @@ func bufferWithFfmpeg(streamID int, playlistID string) { f.Close() tmpSegment++ - stream.Status = true - playlist.Streams[streamID] = stream - BufferInformation.Store(playlistID, playlist) + if stream.Status == false { + stream.Status = true + playlist.Streams[streamID] = stream + BufferInformation.Store(playlistID, playlist) + } tmpFile = fmt.Sprintf("%s%d.ts", tmpFolder, tmpSegment) diff --git a/src/config.go b/src/config.go index 24aff7d..68eeadd 100644 --- a/src/config.go +++ b/src/config.go @@ -47,7 +47,7 @@ func Init() (err error) { System.Compatibility = "1.4.4" // FFmpeg Default Einstellungen - System.FFmpeg.DefaultOptions = "-hide_banner -loglevel panic -i [URL] -c copy -f mpegts pipe:1" + System.FFmpeg.DefaultOptions = "-hide_banner -loglevel error -i [URL] -c copy -f mpegts pipe:1" System.VLC.DefaultOptions = "-I dummy [URL] --sout #std{mux=ts,access=file,dst=-}" // Default Logeinträge, wird später von denen aus der settings.json überschrieben. Muss gemacht werden, damit die ersten Einträge auch im Log (webUI aangezeigt werden) diff --git a/src/data.go b/src/data.go index b062c47..5568a6a 100644 --- a/src/data.go +++ b/src/data.go @@ -503,8 +503,20 @@ func saveXEpgMapping(request RequestStruct) (err error) { if System.ScanInProgress == 0 { + System.ScanInProgress = 1 cleanupXEPG() - buildXEPG(true) + //buildXEPG(true) + + go func() { + + createXMLTVFile() + createM3UFile() + showInfo("XEPG:" + fmt.Sprintf("Ready to use")) + go cachingImages() + + System.ScanInProgress = 0 + + }() } else { @@ -525,8 +537,17 @@ func saveXEpgMapping(request RequestStruct) (err error) { } + System.ScanInProgress = 1 + cleanupXEPG() - buildXEPG(false) + //buildXEPG(false) + + createXMLTVFile() + createM3UFile() + showInfo("XEPG:" + fmt.Sprintf("Ready to use")) + go cachingImages() + + System.ScanInProgress = 0 System.BackgroundProcess = false diff --git a/src/screen.go b/src/screen.go index eaea9ed..7320dba 100644 --- a/src/screen.go +++ b/src/screen.go @@ -261,7 +261,6 @@ func getErrMsg(errCode int) (errMsg string) { case 1050: errMsg = fmt.Sprintf("Invalid duration specification in the M3U8 playlist.") - // M3U Parser case 1060: errMsg = fmt.Sprintf("Invalid characters found in the tvg parameters, streams with invalid parameters were skipped.") @@ -270,6 +269,8 @@ func getErrMsg(errCode int) (errMsg string) { errMsg = fmt.Sprintf("Folder could not be created.") case 1071: errMsg = fmt.Sprintf("File could not be created") + case 1072: + errMsg = fmt.Sprintf("File not found") // Backup case 1090: diff --git a/src/toolchain.go b/src/toolchain.go index aeede9e..19e7f3c 100644 --- a/src/toolchain.go +++ b/src/toolchain.go @@ -45,13 +45,25 @@ func checkFolder(path string) (err error) { return nil } -// Prüft ob die datei im Dateisystem existiert +// Prüft ob die Datei im Dateisystem existiert func checkFile(filename string) (err error) { var file = getPlatformFile(filename) if _, err = os.Stat(file); os.IsNotExist(err) { - return + return err + } + + fi, err := os.Stat(file) + if err != nil { + return err + } + + switch mode := fi.Mode(); { + case mode.IsDir(): + err = fmt.Errorf("%s: %s", file, getErrMsg(1072)) + case mode.IsRegular(): + break } return diff --git a/src/webserver.go b/src/webserver.go index 9c99cdc..e618db0 100644 --- a/src/webserver.go +++ b/src/webserver.go @@ -129,7 +129,12 @@ func Stream(w http.ResponseWriter, r *http.Request) { return } - /* + switch Settings.Buffer { + + case "-": + showInfo(fmt.Sprintf("Buffer:false", Settings.Buffer)) + + case "xteve": if strings.Index(streamInfo.URL, "rtsp://") != -1 || strings.Index(streamInfo.URL, "rtp://") != -1 { err = errors.New("RTSP and RTP streams are not supported") ShowError(err, 2004) @@ -140,12 +145,9 @@ func Stream(w http.ResponseWriter, r *http.Request) { showInfo("Streaming Info:URL was passed to the client") return } - */ - switch Settings.Buffer { + showInfo(fmt.Sprintf("Buffer:true [%s]", Settings.Buffer)) - case "-": - showInfo(fmt.Sprintf("Buffer:false", Settings.Buffer)) default: showInfo(fmt.Sprintf("Buffer:true [%s]", Settings.Buffer)) diff --git a/xteve.go b/xteve.go index 3662161..4dbaafe 100644 --- a/xteve.go +++ b/xteve.go @@ -39,7 +39,7 @@ var GitHub = GitHubStruct{Branch: "master", User: "xteve-project", Repo: "xTeVe- const Name = "xTeVe" // Version : Version, die Build Nummer wird in der main func geparst. -const Version = "2.0.3.0042" +const Version = "2.0.3.0048" // DBVersion : Datanbank Version const DBVersion = "2.1.0"