April 20, 20242 yr I just ended up blowing away the container and all files. I recreated everything fresh and everything seems happy now. Recordings are working for the moment.
August 11, 20241 yr Awesome tool you have made here. I hope that you will find the time and will to keep working on this tool and introduce new features. It truely are a nice tool. Kind regards from Denmark.
October 3, 20241 yr I tried to setup a scheduled recording and although it starts on time, it aborts and never completes. There is no log in the WebUI, but I found this in the container logs: 2024-10-03 05:00:07 [INFO] (Executing job 0-1) 2024-10-03 05:00:07 [INFO] (Job registered: False.) 2024-10-03 05:00:07 [INFO] (Setting up recording LBC - James O'Brien) 2024-10-03 05:00:07 [INFO] (Creating recording task) 2024-10-03 05:00:07 [INFO] (Recording stream) 2024-10-03 05:00:07 [INFO] (Job sent to ffmpeg recording engine) 2024-10-03 05:00:07 [INFO] (Arguments: -i "http://media-ice.musicradio.com/LBCUK" -c copy -t 10800 -metadata Title="LBC - James O'Brien (10.03.24 Thu. 05:00)" -metadata Album="James O'Brien" -metadata Artist="LBC" -metadata Track="1003" -metadata Album_Artist="LBC" -metadata Year="2024" -metadata Genre="Radio" -metadata Comments="LBC_James_O_Brien_(2024-10-03_05.00.07_Thursday)" -c:a libmp3lame -ab 128k -y "/app/config/temp/LBC_James_O_Brien_(2024-10-03_05.00.07_Thursday).mp3".) 2024-10-03 05:30:07 [INFO] (Executing job 0-1) 2024-10-03 05:30:07 [INFO] (Job registered: True.) 2024-10-03 05:30:07 [INFO] (Aborting) [] The container's temp folder appears to contain part of the file. root@ca8a057756f6:/app# ls -lasth /app/config/temp total 123M 55M -rw-r--r-- 1 root root 55M Oct 3 05:59 'LBC_James_O_Brien_(2024-10-03_05.00.07_Thursday).mp3' 0 drwxr-xr-x 1 root root 244 Oct 3 05:00 . I have it set to record for 3 hours. Could that be too long? Is there anyway to get more insight as to why it Aborted? More verbose logs? When I tried a short 2 minute test, that seemed to work. Strangely enough, when I move the mp3 from temp to media and into Plex (the rradio media folder is mapped into my Plex library folder), it always has the strange name "LongBoxofChocolate" Perhaps Plex is auto looking up LBC?
October 3, 20241 yr Author The reason it aborts recording is to prevent hangfire from triggering job multiple times within seconds. Triggered job is registered and any subsequent attempt on the same day will be aborted. The workaround for testing purposes is to create new job. Renaming job will not work and job will be aborted. You can trigger job manually by going to http:/youripaddress:port/dashboard The list of scheduled jobs is under Recurring Jobs I have some jobs scheduled to run for 2 or 4 hours. However in most cases I try to avoid it as stream can get dropped for no reason and file stays in temp folder. FFMPEG does not have a way to notify about stream being dropped. For LBC I suggest you try schedule recording using hourly mode instead of continuous. Set duration for 3 hours and select hourly mode. Unfortunately dropped streams do occur with LBC sometimes. There could be different reasons for it. I suggest you try to record from different sources and see if this problem repeats. Set different recording duration and check temp folder. If you want to include recordings in Plex you need to ensure that created radio library uses local metadata. However, even with this setting Plex will try to fetch unrelated metadata. Problem with Plex is that all recorded files are in one single folder but Plex prefers music to be stored in Artist/Album format. Hence, new recordings are not added to already scanned Albums. Therefore, you may have multiple James O'Brien folders in Plex after couple days of recordings.
October 4, 20241 yr Thank you for the feedback and tips. I deleted everything and started over using the MP3 stream URL that had worked perfectly for me when using the vlc command line to capture recordings in the past. It's also low bandwidth so should be less taxing or demanding on the system and less likely to fail. I created a new recording schedule every day for 3 hours starting at 5AM and used the Hourly instead of Continuous option The logs indicated that two of the three 1 hour recordings completed successfully. The middle hour is missing. 2024-10-04 05:00:10 [INFO] (Executing job 1-1) 2024-10-04 05:00:10 [INFO] (Job registered: False.) 2024-10-04 05:00:10 [INFO] (Setting up recording LBC - James O'Brien) 2024-10-04 05:00:10 [INFO] (Creating recording task) 2024-10-04 05:00:10 [INFO] (Recording stream) 2024-10-04 05:00:10 [INFO] (Job sent to ffmpeg recording engine) 2024-10-04 05:00:10 [INFO] (Arguments: -i "http://media-ice.musicradio.com/LBCLondonMP3Low" -c copy -t 3600 -metadata Title="LBC - James O'Brien (10.04.24 Fri. 05:00)" -metadata Album="James O'Brien" -metadata Artist="LBC" -metadata Track="1004" -metadata Album_Artist="LBC" -metadata Year="2024" -metadata Genre="Radio" -metadata Comments="LBC_James_O_Brien_(2024-10-04_05.00.10_Friday)" -c:a libmp3lame -ab 128k -y "/app/config/temp/LBC_James_O_Brien_(2024-10-04_05.00.10_Friday).mp3".) 2024-10-04 05:30:10 [INFO] (Executing job 1-1) 2024-10-04 05:30:10 [INFO] (Job registered: True.) 2024-10-04 05:30:10 [INFO] (Aborting) 2024-10-04 05:59:56 [INFO] (Parsing metadata) 2024-10-04 05:59:56 [INFO] (ffmpeg exit code 0) 2024-10-04 05:59:56 [INFO] (File recorded LBC_James_O_Brien_(2024-10-04_05.00.10_Friday).mp3) 2024-10-04 05:59:56 [INFO] (Updating job register) 2024-10-04 05:59:56 [INFO] (Moving recorded file from temp folder to media folder) 2024-10-04 05:59:56 [INFO] (Generating audio feed) 2024-10-04 05:59:56 [INFO] (Job 1-1 completed) 2024-10-04 06:00:10 [INFO] (Executing job 1-2) 2024-10-04 06:00:10 [INFO] (Job registered: False.) 2024-10-04 06:00:10 [INFO] (Setting up recording LBC - James O'Brien) 2024-10-04 06:00:10 [INFO] (Creating recording task) 2024-10-04 06:00:10 [INFO] (Recording stream) 2024-10-04 06:00:10 [INFO] (Job sent to ffmpeg recording engine) 2024-10-04 06:00:10 [INFO] (Arguments: -i "http://media-ice.musicradio.com/LBCLondonMP3Low" -c copy -t 3600 -metadata Title="LBC - James O'Brien (10.04.24 Fri. 06:00)" -metadata Album="James O'Brien" -metadata Artist="LBC" -metadata Track="1004" -metadata Album_Artist="LBC" -metadata Year="2024" -metadata Genre="Radio" -metadata Comments="LBC_James_O_Brien_(2024-10-04_06.00.10_Friday)" -c:a libmp3lame -ab 128k -y "/app/config/temp/LBC_James_O_Brien_(2024-10-04_06.00.10_Friday).mp3".) 2024-10-04 06:00:30 [INFO] (Parsing metadata) 2024-10-04 06:00:30 [ERROR] (Object reference not set to an instance of an object.-) 2024-10-04 07:00:10 [INFO] (Executing job 1-3) 2024-10-04 07:00:10 [INFO] (Job registered: False.) 2024-10-04 07:00:10 [INFO] (Setting up recording LBC - James O'Brien) 2024-10-04 07:00:10 [INFO] (Creating recording task) 2024-10-04 07:00:10 [INFO] (Recording stream) 2024-10-04 07:00:10 [INFO] (Job sent to ffmpeg recording engine) 2024-10-04 07:00:10 [INFO] (Arguments: -i "http://media-ice.musicradio.com/LBCLondonMP3Low" -c copy -t 3600 -metadata Title="LBC - James O'Brien (10.04.24 Fri. 07:00)" -metadata Album="James O'Brien" -metadata Artist="LBC" -metadata Track="1004" -metadata Album_Artist="LBC" -metadata Year="2024" -metadata Genre="Radio" -metadata Comments="LBC_James_O_Brien_(2024-10-04_07.00.10_Friday)" -c:a libmp3lame -ab 128k -y "/app/config/temp/LBC_James_O_Brien_(2024-10-04_07.00.10_Friday).mp3".) 2024-10-04 07:30:10 [INFO] (Executing job 1-3) 2024-10-04 07:30:10 [INFO] (Job registered: True.) 2024-10-04 07:30:10 [INFO] (Aborting) 2024-10-04 07:59:57 [INFO] (Parsing metadata) 2024-10-04 07:59:57 [INFO] (ffmpeg exit code 0) 2024-10-04 07:59:57 [INFO] (File recorded LBC_James_O_Brien_(2024-10-04_07.00.10_Friday).mp3) 2024-10-04 07:59:57 [INFO] (Updating job register) 2024-10-04 07:59:57 [INFO] (Moving recorded file from temp folder to media folder) 2024-10-04 07:59:57 [INFO] (Generating audio feed) 2024-10-04 07:59:57 [INFO] (Job 1-3 completed) When I checked the folders manually, I see only two recordings: root@bf4d254a14f5:/media# ls -lasth total 110M 0 drwxrwxrwx 1 99 users 200 Oct 4 07:59 . 55M -rw-r--r-- 1 root root 55M Oct 4 07:59 'LBC_James_O_Brien_(2024-10-04_07.00.10_Friday).mp3' 55M -rw-r--r-- 1 root root 55M Oct 4 05:59 'LBC_James_O_Brien_(2024-10-04_05.00.10_Friday).mp3' 0 drwxr-xr-x 1 root root 170 Oct 3 19:11 .. 0 lrwxrwxrwx 1 root root 6 Oct 1 17:16 media -> /media root@bf4d254a14f5:/media# ls -lasth /app/config/temp total 0 0 drwxr-xr-x 1 root root 0 Oct 4 13:27 . 0 drwxr-xr-x 1 99 users 192 Oct 1 17:16 .. root@bf4d254a14f5:/media# Edited October 5, 20241 yr by frakman1
October 5, 20241 yr Author 7 hours ago, frakman1 said: Thank you for the feedback and tips. I deleted everything and started over using the MP3 stream URL that had worked perfectly for me when using the vlc command line to capture recordings in the past. It's also low bandwidth so should be less taxing or demanding on the system and less likely to fail. I created a new recording schedule every day for 3 hours starting at 5AM and used the Hourly instead of Continuous option The logs indicated that two of the three 1 hour recordings completed successfully. The middle hour is missing. root@bf4d254a14f5:/media# ls -lasth total 110M 0 drwxrwxrwx 1 99 users 200 Oct 4 07:59 . 55M -rw-r--r-- 1 root root 55M Oct 4 07:59 'LBC_James_O_Brien_(2024-10-04_07.00.10_Friday).mp3' 55M -rw-r--r-- 1 root root 55M Oct 4 05:59 'LBC_James_O_Brien_(2024-10-04_05.00.10_Friday).mp3' 0 drwxr-xr-x 1 root root 170 Oct 3 19:11 .. 0 lrwxrwxrwx 1 root root 6 Oct 1 17:16 media -> /media root@bf4d254a14f5:/media# ls -lasth /app/config/temp total 0 0 drwxr-xr-x 1 root root 0 Oct 4 13:27 . 0 drwxr-xr-x 1 99 users 192 Oct 1 17:16 .. root@bf4d254a14f5:/media# When I checked the folders manually, I see only two recordings: root@bf4d254a14f5:/media# ls -lasth total 110M 0 drwxrwxrwx 1 99 users 200 Oct 4 07:59 . 55M -rw-r--r-- 1 root root 55M Oct 4 07:59 'LBC_James_O_Brien_(2024-10-04_07.00.10_Friday).mp3' 55M -rw-r--r-- 1 root root 55M Oct 4 05:59 'LBC_James_O_Brien_(2024-10-04_05.00.10_Friday).mp3' 0 drwxr-xr-x 1 root root 170 Oct 3 19:11 .. 0 lrwxrwxrwx 1 root root 6 Oct 1 17:16 media -> /media root@bf4d254a14f5:/media# ls -lasth /app/config/temp total 0 0 drwxr-xr-x 1 root root 0 Oct 4 13:27 . 0 drwxr-xr-x 1 99 users 192 Oct 1 17:16 .. root@bf4d254a14f5:/media# It looks like second recording was not executed. If you go to Dashboard/Recurring Jobs, how many job Id you can see in the same sequence? Hourly recordings have Id that starts with number 1 . For example for 3 hour recording there should be id 1-1, 1-2, 1-3 There is a column that shows last execution time. Out of curiosity. What system are you using? Is appdata folder on cache drive? Is it /mnt/cache/appdata or /mnt/user/appdata? This url usually works for me http://media-ice.musicradio.com/LBCUK
October 5, 20241 yr It looks like my logs didn't paste correctly. I just put it back in my previous post. I can see all 3 recordings attempted. I don't know what this error means: 2024-10-04 06:00:30 [ERROR] (Object reference not set to an instance of an object.-) app data is in: /mnt/user/appdata/rradio
October 5, 20241 yr Author 10 minutes ago, frakman1 said: It looks like my logs didn't paste correctly. I just put it back in my previous post. I can see all 3 recordings attempted. I don't know what this error means: 2024-10-04 06:00:30 [ERROR] (Object reference not set to an instance of an object.-) app data is in: /mnt/user/appdata/rradio Do you have a cache drive installed? Your current setup goes through the array, which in the way slows down entire process. In addition, parity is calculated all the time. Proper way is to separate appdata from array on its own cache drive. I suggest you move appadata to cache drive and make changes in container templates to use new destination. It should be /mnt/cache/appdata Also appdata share should be set to use cache drive only. Error is bit cryptic, however it is most likely related to execution of FFMPEG Edited October 5, 20241 yr by PeteL
October 5, 20241 yr It seems that the rradio app currently expects appdata to be on the cache drive for it to function properly, but since this isn't the default for Unraid, it may not align with everyone's setup. Many users, including myself, have various apps like Plex, working smoothly with appdata in its current location. Would it be possible to adjust the app so that we can map the temp folder to a different location, such as the cache drive? I attempted to volume mount the container's temp folder, but it seems to be tied to the appdata folder, which caused the change to fail.
October 5, 20241 yr Author 2 minutes ago, frakman1 said: It seems that the rradio app currently expects appdata to be on the cache drive for it to function properly, but since this isn't the default for Unraid, it may not align with everyone's setup. Many users, including myself, have various apps like Plex, working smoothly with appdata in its current location. Would it be possible to adjust the app so that we can map the temp folder to a different location, such as the cache drive? I attempted to volume mount the container's temp folder, but it seems to be tied to the appdata folder, which caused the change to fail. You can make this changes when you setup container template. Config folder can be set either to appdata on cache drive or in the array. You can edit location. From my own experience I can tell you that you will get better performance when appdata is outside of an array. Maybe create another share on cache called appdata1 and select it for config folder when installing cointainer
October 5, 20241 yr i just checked again and it looks like it's already using Cache as the primary storage despite residing in /mnt/user/appdata Edited October 5, 20241 yr by frakman1
October 5, 20241 yr Author 13 hours ago, frakman1 said: i just checked again and it looks like it's already using Cache as the primary storage despite residing in /mnt/user/appdata The way you have set it up is that appdata is using two locations. Primary location is cache drive and secondary location is an array. Most likely you have files residing in both cache/appdata and disk#/appadata What you really want is appdata to be exclusively on cache drive In addition docker image should be outside of an array too as Unraid constantly calculates parity
October 5, 20241 yr Currently, appdata is primarily stored on the cache drive but gets moved to the array by the Mover once a day at 3:40 AM. So, files are still initially written to the cache. If your app, rradio, requires writing to the temp directory on the cache for stability, that's already in place. However, keeping everything in appdata exclusively on the cache isn't ideal. It wouldn’t benefit from the redundancy and backup features of the Unraid array, which is a key advantage of using Unraid for storage. It looks like our setups differ too much for this to be a workable solution for me. I appreciate your assistance, but I'll explore other options. Thank you again for your help!
November 23, 20241 yr Amazing piece of software, thank you! The configured job, even with my correct TZ environment variable has not worked/triggered yet, but I have a different question. For a specific AAC radio link with a query param, I need to use a proxy/vpn. I have a Proxivy docker running for this and have been able to wget ipinfo.io/ip with the output IP being that of my wireguard vpn through Proxivy, using these environment variables: -e http_proxy=1.168.1.10:8118 -e https_proxy=1.168.1.10:8118 But the radio is not playing as if it is connected through the VPN, unfortunately, while the container seems to be able to access ipinfo.io with the provided proxy. Is that a specific configuration in the container perchance? Edited November 23, 20241 yr by Arndroid
November 23, 20241 yr Author 3 hours ago, Arndroid said: Amazing piece of software, thank you! The configured job, even with my correct TZ environment variable has not worked/triggered yet, but I have a different question. For a specific AAC radio link with a query param, I need to use a proxy/vpn. I have a Proxivy docker running for this and have been able to wget ipinfo.io/ip with the output IP being that of my wireguard vpn through Proxivy, using these environment variables: -e http_proxy=1.168.1.10:8118 -e https_proxy=1.168.1.10:8118 But the radio is not playing as if it is connected through the VPN, unfortunately, while the container seems to be able to access ipinfo.io with the provided proxy. Is that a specific configuration in the container perchance? 1. I suggest you navigate to myipaddress:port/dashboard/recurring to see when is the next time this job will be triggered. You can also verify if job is set according to your time zone. 2. If I understand correctly you are trying stream live radio link through proxy/vpn wireguard. I have setup my radio container to be accessed using Nginx Proxy Manager and Cloudflare and I have no issues streaming it live on my phone. If the url that you are using has signal and can be recorded than there is nothing that would prevent it from being streamed. If I'm at work, I cannot stream or played recorded files at all. This is because of the security measure put in place by my employer. My guess is your issues are related to the proxy server. 3. I'm not familiar with wireguard. Most likely you have to do some port forwarding on your router 4. There is no additional settings that are required. Url is simply passed to a browser for playback
November 30, 20241 yr On 11/23/2024 at 6:09 PM, PeteL said: 1. I suggest you navigate to myipaddress:port/dashboard/recurring to see when is the next time this job will be triggered. You can also verify if job is set according to your time zone. 2. If I understand correctly you are trying stream live radio link through proxy/vpn wireguard. I have setup my radio container to be accessed using Nginx Proxy Manager and Cloudflare and I have no issues streaming it live on my phone. If the url that you are using has signal and can be recorded than there is nothing that would prevent it from being streamed. If I'm at work, I cannot stream or played recorded files at all. This is because of the security measure put in place by my employer. My guess is your issues are related to the proxy server. 3. I'm not familiar with wireguard. Most likely you have to do some port forwarding on your router 4. There is no additional settings that are required. Url is simply passed to a browser for playback Thanks! I see, the automatic recordings seem to work, but I need to tweak them a bit, thank you. Other than that, I meant having the docker access the internet/wan through the proxy/vpn. I need the radio station to be accessed from a certain country, or otherwise it does not work. I can access the application fine with my reverse proxy if I wanted to, but the Radio needs to be accessed through a Proxivy/VPN from like Germany or something. I was wondering if there was a way to set this up with this docker. Thank you so much again for this great tool! Edit: Adding the extra parameters to the Rradio container template like this: `--env http_proxy=http://<proxivy-ip>:<proxivy-port> --env https_proxy=http://<proxivy-ip>:<proxivy-port>` Seems to work wonders for me! Edit 2: Also now running `ntpdate -u pool.ntp.org` daily as an userscript on the unraid host machine, as the time was incorrect, regardless of the date time settings and telling it to sync with pool.ntp.org through the WebGUI. Now the time adjusted at the Rradio docker, but went an hour to the past for me, so I removed the TZ env altogether and it just takes the host system time for me now, which is perfect. If that does not work, I believe you could also do this otherwise: volume mount host /etc/localtime to container /etc/localtime as read only Edit 3: The donation link is not working @PeteL Edited December 4, 20241 yr by Arndroid
December 4, 20241 yr Hmm, a scheduled job is still increasing in size every second and minute and is in /app/config/temp, but the job was supposed to end 10 minutes ago now, the time in the docker is correct. I selected continuous in the assumption that would make a single file for just the duration. (Instead of hourly which I assume would cut/split the recording over multiple 1 hour mp3 files) Is that correct or does continuous just never stop perhaps? Edited December 4, 20241 yr by Arndroid
December 4, 20241 yr Author 20 minutes ago, Arndroid said: Hmm, a scheduled job is still increasing in size every second and minute and is in /app/config/temp, but the job was supposed to end 10 minutes ago now, the time in the docker is correct. I selected continuous in the assumption that would make a single file for just the duration. (Instead of hourly which I assume would cut/split the recording over multiple 1 hour mp3 files) Is that correct or does continuous just never stop perhaps? I never came across such a behavior. This is highly unusual. Please confirm what settings did you use for this particular job. Continuous option would create one single file for entire scheduled duration. It will not continue recording past the scheduled duration. Hourly will attempt to record scheduled job in segments. Example if you schedule 3 hours recording starting from 8 AM then this job will be triggered 3 times at 8AM., 9AM and 10AM. hence you will have 3 hourly mp3 files. To verify what parameters were sent to ffmpeg you can open container log. You will see details of the triggered job. If you think something is going on with currently recorded file, you can stop container. This will force ffmpeg to stop
December 4, 20241 yr 4 hours ago, PeteL said: I never came across such a behavior. This is highly unusual. Please confirm what settings did you use for this particular job. Continuous option would create one single file for entire scheduled duration. It will not continue recording past the scheduled duration. Hourly will attempt to record scheduled job in segments. Example if you schedule 3 hours recording starting from 8 AM then this job will be triggered 3 times at 8AM., 9AM and 10AM. hence you will have 3 hourly mp3 files. To verify what parameters were sent to ffmpeg you can open container log. You will see details of the triggered job. If you think something is going on with currently recorded file, you can stop container. This will force ffmpeg to stop This is the log around that time: Quote starting application warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60] Storing keys in a directory '/app/config' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed. warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[15] Unknown element with name 'settings' found in keyring, skipping. 2024-12-04 07:15:41 [INFO] (Hangfire.BackgroundJobServer) Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' 2024-12-04 07:15:41 [INFO] (Hangfire.BackgroundJobServer) Using the following options for Hangfire Server: Worker count: 20 Listening queues: 'default' Shutdown timeout: 00:00:15 Schedule polling interval: 00:00:15 2024-12-04 07:15:41 [TIME_ZONE] (UTC+01:00) GMT+01:00 2024-12-04 07:15:41 [INFO] (Checking database) 2024-12-04 07:15:41 [INFO] (Restoring existing scheduled jobs) 2024-12-04 07:15:41 [INFO] (Success! Restoration completed) info: Microsoft.Hosting.Lifetime[0] Now listening on: http://[::]:80 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Production info: Microsoft.Hosting.Lifetime[0] Content root path: /app 2024-12-04 07:15:41 [INFO] (Hangfire.Server.BackgroundServerProcess) Server 9a4263f21653:28:bf8db912 successfully announced in 93.2444 ms 2024-12-04 07:15:41 [INFO] (Hangfire.Server.BackgroundServerProcess) Server 9a4263f21653:28:bf8db912 is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... 2024-12-04 07:15:41 [INFO] (Hangfire.Server.BackgroundServerProcess) Server 9a4263f21653:28:bf8db912 all the dispatchers started [] 2024-12-04 07:20:12 [INFO] (Executing job 0-8) 2024-12-04 07:20:12 [INFO] (Job registered: False.) 2024-12-04 07:20:12 [INFO] (Setting up recording {TITLEHERE} wed) 2024-12-04 07:20:12 [INFO] (Creating recording task) 2024-12-04 07:20:12 [INFO] (Recording stream) 2024-12-04 07:20:12 [INFO] (Job sent to ffmpeg recording engine) 2024-12-04 07:20:12 [INFO] (Arguments: -i "{URLHERE}" -c copy -t 73800 -metadata Title="{TITLEHERE} wed (12.04.24 Wed. 19:20)" -metadata Album="{TITLEHERE} wed" -metadata Artist="{RADIONAME}" -metadata Track="1204" -metadata Album_Artist="{RADIONAME}" -metadata Year="2024" -metadata Genre="Radio" -metadata Comments="{TITLEHERE}_wed_(2024-12-04_19.20.12_Wednesday)" -c:a libmp3lame -ab 320k -y "/app/config/temp/{TILTEHERE}_wed_(2024-12-04_19.20.12_Wednesday).mp3".) [] [] [] fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] An unhandled exception has occurred while executing the request. System.NullReferenceException: Object reference not set to an instance of an object. at Application.Mapper.ToSourceModel(Source source) in \\Mac\Home\Documents\Source\rradio\src\Application\Mapper\SourceMapper.cs:line 17 at Application.Sources.Queries.GetSourceByIdQuery.Execute(Int32 sourceId) in \\Mac\Home\Documents\Source\rradio\src\Application\Pages\Sources\Queries\GetSourceByIdQuery.cs:line 24 at WebApp.Pages.Sources.IndexModel.LoadObjects(Int32 sourceId) in \\Mac\Home\Documents\Source\rradio\src\WebApp\Pages\Sources\Index.cshtml.cs:line 68 at WebApp.Pages.Sources.IndexModel.OnGet(Int32 sourceId) in \\Mac\Home\Documents\Source\rradio\src\WebApp\Pages\Sources\Index.cshtml.cs:line 61 at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ExecutorFactory.NonGenericTaskHandlerMethod.Execute(Object receiver, Object[] arguments) at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeHandlerMethodAsync() at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeNextPageFilterAsync() at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.Rethrow(PageHandlerExecutedContext context) at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeInnerFilterAsync() at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync() --- End of stack trace from previous location where exception was thrown --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task) [] [] 2024-12-04 07:50:12 [INFO] (Executing job 0-8) 2024-12-04 07:50:12 [INFO] (Job registered: True.) 2024-12-04 07:50:12 [INFO] (Aborting) [] [] [] I believe the "fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]" error we see was me landing on a page of an old job/recording that I removed, so that route failed. The docker logs time is not in sync with the system or the docker container itself. (It currently matches with my unraid host when I run "date" in the bash/terminal) Edit: Will have another log for another attempt coming up in a couple of minutes. Edit 2: And here it is: Quote starting application warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60] Storing keys in a directory '/app/config' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed. warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[15] Unknown element with name 'settings' found in keyring, skipping. 2024-12-04 10:28:55 [INFO] (Hangfire.BackgroundJobServer) Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' 2024-12-04 10:28:55 [INFO] (Hangfire.BackgroundJobServer) Using the following options for Hangfire Server: Worker count: 20 Listening queues: 'default' Shutdown timeout: 00:00:15 Schedule polling interval: 00:00:15 2024-12-04 10:28:55 [TIME_ZONE] (UTC+01:00) GMT+01:00 2024-12-04 10:28:55 [INFO] (Checking database) 2024-12-04 10:28:55 [INFO] (Restoring existing scheduled jobs) 2024-12-04 10:28:55 [INFO] (Success! Restoration completed) info: Microsoft.Hosting.Lifetime[0] Now listening on: http://[::]:80 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Production info: Microsoft.Hosting.Lifetime[0] Content root path: /app 2024-12-04 10:28:55 [INFO] (Hangfire.Server.BackgroundServerProcess) Server 473d1681c5dd:22:ed430d1c successfully announced in 113.0415 ms 2024-12-04 10:28:55 [INFO] (Hangfire.Server.BackgroundServerProcess) Server 473d1681c5dd:22:ed430d1c is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... 2024-12-04 10:28:55 [INFO] (Hangfire.Server.BackgroundServerProcess) Server 473d1681c5dd:22:ed430d1c all the dispatchers started reloading [] 2024-12-04 10:35:10 [INFO] (Executing job 1-1) 2024-12-04 10:35:10 [INFO] (Job registered: False.) 2024-12-04 10:35:10 [INFO] (Setting up recording {TITLE} wed) 2024-12-04 10:35:10 [INFO] (Creating recording task) 2024-12-04 10:35:10 [INFO] (Recording stream) 2024-12-04 10:35:10 [INFO] (Job sent to ffmpeg recording engine) 2024-12-04 10:35:10 [INFO] (Arguments: -i "{RADIOURL}" -c copy -t 3600 -metadata Title="{TITLE} wed (12.04.24 Wed. 22:35)" -metadata Album="Test schedule 1920 wed" -metadata Artist="{RADIONAME}" -metadata Track="1204" -metadata Album_Artist="{RADIONAME}" -metadata Year="2024" -metadata Genre="Radio" -metadata Comments="{RADIOTITLE}_wed_(2024-12-04_22.35.10_Wednesday)" -c:a libmp3lame -ab 320k -y "/app/config/temp/{RADIOTITLE}_wed_(2024-12-04_22.35.10_Wednesday).mp3".) [] 2024-12-04 11:05:10 [INFO] (Executing job 1-1) 2024-12-04 11:05:10 [INFO] (Job registered: True.) 2024-12-04 11:05:10 [INFO] (Aborting) The scheduled job did start perfectly fine, but does not stop at the scheduled time, it is still recording as we speak, should have stopped 15 minutes ago. Edit 3: The schedule log is also empty fwiw: Edited December 5, 20241 yr by Arndroid
December 5, 20241 yr Author 22 hours ago, Arndroid said: This is the log around that time: I believe the "fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]" error we see was me landing on a page of an old job/recording that I removed, so that route failed. The docker logs time is not in sync with the system or the docker container itself. (It currently matches with my unraid host when I run "date" in the bash/terminal) Edit: Will have another log for another attempt coming up in a couple of minutes. Edit 2: And here it is: The scheduled job did start perfectly fine, but does not stop at the scheduled time, it is still recording as we speak, should have stopped 15 minutes ago. Edit 3: The schedule log is also empty fwiw: 1. If you look at the log you can see the container internal Time Zone 2024-12-04 07:15:41 [TIME_ZONE] (UTC+01:00) GMT+01:00 2024-12-04 07:15:41 [INFO] (Checking database) It's possible to set the time zone by including additional ENV variable in container template. There was someone else with the same issue. Please refer to the earlier posts on how to do it. 2. 2024-12-04 07:20:12 [INFO] (Arguments: -i "{URLHERE}" -c copy -t 73800 -metadata Title="{TITLEHERE} wed (12.04.24 Wed. 19:20)" -metadata Album="{TITLEHERE} wed" -metadata Artist="{RADIONAME}" -metadata Track="1204" -metadata Album_Artist="{RADIONAME}" -metadata Year="2024" -metadata Genre="Radio" -metadata Comments="{TITLEHERE}_wed_(2024-12-04_19.20.12_Wednesday)" -c:a libmp3lame -ab 320k -y "/app/config/temp/{TILTEHERE}_wed_(2024-12-04_19.20.12_Wednesday).mp3".) -t 73800 is over 20Hrs of recording time. I strongly recommend not to do that, considering also thet your selected bitrate is 320kbps. This will result in extremely large file 3. 2024-12-04 11:05:10 [INFO] (Executing job 1-1) 2024-12-04 11:05:10 [INFO] (Job registered: True.) 2024-12-04 11:05:10 [INFO] (Aborting) The first attempt was aborted because the job with the same name & time was already executed. To prevent creating duplicate recordings, scheduler is configured to to run recurring job only once a day. 4. {RADIONAME} I'm confused about this naming. I think you edited the log output. If not than I would not use any parenthesis. These tags are written into a file. I'm not sure how ffmpeg is treating them 5. Recordings logs are empty. There is a bug in the software. It will be rectified in upcoming release Please tell me more about your setup. Are you running it on Unraid? Is appdata stored on cache drive? Please post a screenshot of the job you scheduled.
December 5, 20241 yr 23 hours ago, PeteL said: 1. If you look at the log you can see the container internal Time Zone 2024-12-04 07:15:41 [TIME_ZONE] (UTC+01:00) GMT+01:00 2024-12-04 07:15:41 [INFO] (Checking database) It's possible to set the time zone by including additional ENV variable in container template. There was someone else with the same issue. Please refer to the earlier posts on how to do it. 2. 2024-12-04 07:20:12 [INFO] (Arguments: -i "{URLHERE}" -c copy -t 73800 -metadata Title="{TITLEHERE} wed (12.04.24 Wed. 19:20)" -metadata Album="{TITLEHERE} wed" -metadata Artist="{RADIONAME}" -metadata Track="1204" -metadata Album_Artist="{RADIONAME}" -metadata Year="2024" -metadata Genre="Radio" -metadata Comments="{TITLEHERE}_wed_(2024-12-04_19.20.12_Wednesday)" -c:a libmp3lame -ab 320k -y "/app/config/temp/{TILTEHERE}_wed_(2024-12-04_19.20.12_Wednesday).mp3".) -t 73800 is over 20Hrs of recording time. I strongly recommend not to do that, considering also thet your selected bitrate is 320kbps. This will result in extremely large file 3. 2024-12-04 11:05:10 [INFO] (Executing job 1-1) 2024-12-04 11:05:10 [INFO] (Job registered: True.) 2024-12-04 11:05:10 [INFO] (Aborting) The first attempt was aborted because the job with the same name & time was already executed. To prevent creating duplicate recordings, scheduler is configured to to run recurring job only once a day. 4. {RADIONAME} I'm confused about this naming. I think you edited the log output. If not than I would not use any parenthesis. These tags are written into a file. I'm not sure how ffmpeg is treating them 5. Recordings logs are empty. There is a bug in the software. It will be rectified in upcoming release Please tell me more about your setup. Are you running it on Unraid? Is appdata stored on cache drive? Please post a screenshot of the job you scheduled. Thanks for your help! 1. I am in the UTC +1 timezone, so this works for me I believe. Whenever I specifically set the TZ env to Europe/Amsterdam for example, the time actually goes one hour to the past for me, which the set TZ Europe/Amsterdam is supposed to match UTC +1. 2. "-t 73800 is over 20Hrs of recording time.", Ohhh, I now see that "Duration" is not "End Time", I blindly assumed so and did not read. This was not my intention at all, of course. Thank you! That will very very likely resolve my problems, so sorry about that. Also, I will now set the quality to 128kbps again! 3. Hmm, not sure I know what causes that, these are my jobs: 4. Indeed, I did rename the log outputs, there are no parenthesis in the actual names however. 5. That sounds great, thank you! Again, the donation link is no longer working, I really do appreciate this software. (And support the sentiment of this becoming open source perchance one day!) I am running the Docker template for the community apps on Unraid yes. For my specific use case which requires a VPN for a specific internet radio I added two env vars: "https_proxy=http://192.168.1.10:8119" and "http_proxy=http://192.168.1.10:8119" And also mapped a host:container Path: /etc/localtime:/etc/localtime (read only) to make sure the time is in line with my Unraid host system. Appdata is stored on a cache drive, indeed. Edit: One bug report though, when I edit a scheduled job, the set image is unset when saving the edit, and I have to upload it again, which is annoying. But I do not think it is a huge issue, just a report. Edit 2: So, now that I learned how to read and understand that we can only enter a Start Time and a Duration (not an "End Time", which I expected) Can I ask for two feature requests? One is to have either/or an option to set an End Time specifically instead. The other is to be able to schedule a record job, one time, for a specific date on a specific time instead. Like a calendar/agenda planned recording. ...So not a specific day every week to record on that specific specific time, every time that day in every week occurs. I cannot plan my recordings in advance, for my specific use case that would make life so much easier. Edit 3: Ah turns out, while using curl (when installed in the docker container), from the docker container and running "curl -s ifconfig.io" does return the VPNs IP, but the internet radio feed/station I play does not connect through the VPN still, that is fairly strange. At least, the live feed plays as if it connects through my browser with my real IP. (I have not yet been able to check with a recorded job, I can verify this within an hour it is currently recording...) Edit 4: YESS!!! The recording worked perfectly, it recorded through my VPN setup! So when you select Live through the browser, it plays through the client browser, not through the docker, noted. So happy that this works! Edit 5: As a third feature request, in addition to "Edit 2": Can we make the #progress bar a little larger, it is really hard to precisely click on it to skip through the recording? Edited December 6, 20241 yr by Arndroid
April 3, 20251 yr Author It’s been a long time since the first release of the rRadio. I’ve been working on new features and improvements and finally I think it is ready to be released into the wild. There are some major changes that would make application easier and more enjoyable to use it. Let me highlight some of the things that are included in this release. * All the recordings are divided right now into two categories Added and Played. Accessing previously played shows is a breeze. Bear in mind that playing recording will not prevent deleting it when its default Keep value expires. * To prevent deletion there are two options. First is adding recording to Favorites and second is adding it to Archive. When file is added to Archive it will only be accessible through Archive. This is a great feature if you want to preserve some recordings * Job scheduler has a new feature One-Time recordings. It’s possible to set recording for specific date, but it’s also possible to set recordings for different dates and group them. Fo this to happen, we need to create different One-Time jobs with the same name. * New Activity page displays progress of jobs that are being currently recorded. In addition Upcoming tab shows queued jobs for Today and Tomorrow. Please note that scheduled recording times are displayed in user’s Time Zone local time * Support for different Time Zones. No more calculating time offsets between different Time Zones is required. Set Radio Station Time Zone and use its local time to schedule recordings. Great benefit of this approach is the we do not have to worry about adjusting jobs to Daylight Saving Time. If you have already existing Sources and Jobs, you have to change Time Zone and adjust manually scheduled jobs to local time of that Time Zone. This is not done automatically. * Jobs page has new actions too. Job can be suspended if for some reason we do not want record it right now. Also, job can be triggered. The feature should be used for testing purposes only if we want to find out if scheduled job would run properly. It will not in any way affect saved scheduled job. * Settings page. I understand that date format was annoying for some the users. Now you can select your preferred format. This would apply to future recordings, but new Maintenance page has a button that would allow renaming all existing titles. Depending on how many recordings are present in your database it may take few seconds. Please be patient. * Maintenance page contains buttons that initiate database related activities. Every once a while station’s URL may go rogue. It’s possible right now to look for failed URLs. * I have to say I got little bit bored looking at the default colors of the application. I included 15 more additional Color Themes that can be selected in Settings page. My favorite right now is Chinese Violet. * For new users that will use application for the very first time. They will be taken directly to the page where they have to setup new source radio station. * Since this is an update, WebUI may experience some odd behavior. There are new script and elements that did not exist before. Please use on your keyboard Ctrl+F5 keys to reload page’s resources. This applies to browsers on Windows machines. On Mac, you should hold Shift button and click reload icon on top next to previous and next page buttons. * There are numerous bug fixes and improvements. I’ve been beta testing application for last 3 months working diligently on squashing them and I think we are ready to use new version of rRadio.
April 8, 20251 yr Hi everyone! First of all, thank you for this amazing project – rRadio is absolutely incredible. The interface is clean, it's easy to schedule recordings, and it's exactly what I needed for archiving radio shows. Fantastic work! I just have one question regarding the recording behavior: Is it possible to record without re-encoding the stream, i.e. just copy the original stream directly as-is? When I look at the job log, I see something like this: 2025-04-08 11:21:07 [INFO] (Arguments: -i "https://scdn.nrjaudio.fm/adwz2/fr/30201/mp3_128.mp3?origine=fluxradios" -c copy -t 120 -metadata Title="cherie fm - Test (04.08.25 Tue. 23:21)" -metadata Album="Test" -metadata Artist="cherie fm" -metadata Track="0408" -metadata Album_Artist="cherie fm" -metadata Year="2025" -metadata Genre="Radio" -metadata Comments="cherie_fm_Test_(2025-04-08_23.21.07_Tuesday)" -c:a libmp3lame -ab 128k -y "/app/config/temp/cherie_fm_Test_(2025-04-08_23.21.07_Tuesday).mp3".) It seems that -c copy is being used initially, but then -c:a libmp3lame -ab 128k follows right after, which suggests the stream is actually being re-encoded to MP3. Could you confirm if there's a way to preserve the original stream without any re-encoding, especially for MP3 sources? Thanks again for this amazing tool – it's already a game changer!
April 9, 20251 yr Author 2 hours ago, math65 said: Hi everyone! First of all, thank you for this amazing project – rRadio is absolutely incredible. The interface is clean, it's easy to schedule recordings, and it's exactly what I needed for archiving radio shows. Fantastic work! I just have one question regarding the recording behavior: Is it possible to record without re-encoding the stream, i.e. just copy the original stream directly as-is? When I look at the job log, I see something like this: 2025-04-08 11:21:07 [INFO] (Arguments: -i "https://scdn.nrjaudio.fm/adwz2/fr/30201/mp3_128.mp3?origine=fluxradios" -c copy -t 120 -metadata Title="cherie fm - Test (04.08.25 Tue. 23:21)" -metadata Album="Test" -metadata Artist="cherie fm" -metadata Track="0408" -metadata Album_Artist="cherie fm" -metadata Year="2025" -metadata Genre="Radio" -metadata Comments="cherie_fm_Test_(2025-04-08_23.21.07_Tuesday)" -c:a libmp3lame -ab 128k -y "/app/config/temp/cherie_fm_Test_(2025-04-08_23.21.07_Tuesday).mp3".) It seems that -c copy is being used initially, but then -c:a libmp3lame -ab 128k follows right after, which suggests the stream is actually being re-encoded to MP3. Could you confirm if there's a way to preserve the original stream without any re-encoding, especially for MP3 sources? Thanks again for this amazing tool – it's already a game changer! I didn't notice that -c flag was used more than once. Thank you for pointing this out. I think preserving original stream without re-encoding is possible. I did some test already with FLAC output. Potential problem is that some users may not know what stream format is being used. It may also cause some compatibility issues with some web browsers. Anyway I think this feature can be implemented.
April 9, 20251 yr 5 hours ago, PeteL said: I didn't notice that -c flag was used more than once. Thank you for pointing this out. I think preserving original stream without re-encoding is possible. I did some test already with FLAC output. Potential problem is that some users may not know what stream format is being used. It may also cause some compatibility issues with some web browsers. Anyway I think this feature can be implemented. Yes, it is possible to record a stream without re-encoding using ffmpeg. Perhaps suggesting it in the bitrate list, without re-encoding, preserves the original stream? Thanks again for this amazing app.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.