{"record":{"id":"e0dd27e7d93b0e4c","repo":"AlexxIT/go2rtc","slug":"ivideon-can-t-get-live-stream-s","errorCode":null,"errorMessage":"ivideon: can't get live_stream: %s","messagePattern":"ivideon: can't get live_stream: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/ivideon/ivideon.go","lineNumber":81,"sourceCode":"\t\t\t\"/live_stream?op=GET&access_token=public&q=2&video_codecs=h264&format=ws-fmp4\",\n\t)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tvar v struct {\n\t\tMessage string `json:\"message\"`\n\t\tResult  struct {\n\t\t\tURL string `json:\"url\"`\n\t\t} `json:\"result\"`\n\t\tSuccess bool `json:\"success\"`\n\t}\n\tif err = json.NewDecoder(resp.Body).Decode(&v); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif !v.Success {\n\t\treturn \"\", fmt.Errorf(\"ivideon: can't get live_stream: \" + v.Message)\n\t}\n\n\treturn v.Result.URL, nil\n}\n\nfunc (p *Producer) Start() error {\n\treceivers := make(map[uint32]*core.Receiver)\n\tfor _, receiver := range p.Receivers {\n\t\ttrackID := p.dem.GetTrackID(receiver.Codec)\n\t\treceivers[trackID] = receiver\n\t}\n\n\tch := make(chan []byte, 10)\n\tdefer close(ch)\n\n\tch <- p.buf\n\n\tgo func() {","sourceCodeStart":63,"sourceCodeEnd":99,"githubUrl":"https://github.com/AlexxIT/go2rtc/blob/c245815e75e2a5fd60b4290f12bfc04e55a984d3/pkg/ivideon/ivideon.go#L63-L99","documentation":"ivideon.Producer.GetLiveStream received a JSON response from the Ivideon API where the Success flag was false, meaning the API rejected the live-stream request; the API's Message string is embedded in the error. The URL is only returned on a successful response.","triggerScenarios":"Calling GetLiveStream (directly or via Dial) against the Ivideon API when the camera/producer is offline, the camera ID is wrong, credentials are invalid, or the account has no streaming rights.","commonSituations":"Expired or invalid Ivideon API credentials; camera ID typo; camera unpowered/disconnected; subscription lacking live-stream access.","solutions":["Read v.Message embedded in the error — it carries the API's specific reason (auth failed, camera not found, etc.).","Verify the camera ID and that the camera is online in the Ivideon dashboard.","Check/refresh the Ivideon API credentials (email/API key) used to build the Producer.","Confirm the account subscription permits live streaming for that camera.","Retry later if the message indicates a temporary camera-side issue."],"exampleFix":"// before\nproducer := &ivideon.Producer{CameraID: \"cam-123\", Email: email, Password: pwd}\n// after: validate camera ID and creds, and surface Message\nurl, err := producer.GetLiveStream(media)\nif err != nil {\n    log.Printf(\"ivideon live stream failed (check camera id/creds): %v\", err)\n    return err\n}","handlingStrategy":"try-catch","validationCode":"// before calling: ensure config has camera id and credentials\nif camID == \"\" || apiKey == \"\" { return errors.New(\"ivideon camera id and api key required\") }","typeGuard":null,"tryCatchPattern":"url, err := producer.GetLiveStream(media)\nif err != nil {\n    if strings.Contains(err.Error(), \"can't get live_stream\") {\n        log.Printf(\"ivideon API said: %s\", err) // Message is embedded\n        return fallbackStream\n    }\n    return err\n}","preventionTips":["Monitor camera online status in the Ivideon dashboard before streaming","Validate camera IDs against the account's device list at startup","Refresh credentials periodically and on auth-flavored failures","Implement a fallback stream source for flaky cameras"],"tags":["go","ivideon","api","rtsp"],"backgroundTag":"http-error-response","analyzedSha":"c245815e75e2a5fd60b4290f12bfc04e55a984d3","analyzedAt":"2026-09-07T11:47:02.965Z","contentChangedAt":"2026-09-07T11:47:02.965Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}