Page 1 of 1
[Bug] Error in parsing Icecast Radio Directory
Posted: 03 Dec 2020 19:38
by oasis123
VideoLAN downloads the list of channels of 'Icecast Radio Directory' from
http://dir.xiph.org/yp.xml
If this xml file contains entries with blank <listen_url> field, VideoLAN stops processing further channels.
Code: Select all
<entry><server_name>HearMe - Smooth Jazz</server_name><server_type>audio/mpeg</server_type><bitrate>128</bitrate><samplerate>44100</samplerate><channels>2</channels><listen_url></listen_url><current_song></current_song><genre>Jazz</genre></entry>
I downloaded manually the xml file and removed entries with blank (void) <listen_url></listen_url>.
Then I "deceived" VideoLAN to download my local edited xml.
Added to C:\Windows\System32\drivers\etc\hosts file: 127.0.0.1 dir.xiph.org
Created a local web server with PHP
This way, accessing 'Icecast Radio Directory' fetched and parsed the edited xml. Finally I created a Playlist with the channels I like and saved the radio-playlist.xspf file.
Or Icecast produces a xml with no blanks URLs, or VideoLAN learns to filter out those entries.
Re: [Bug] Error in parsing Icecast Radio Directory
Posted: 04 Dec 2020 06:23
by Lotesdelere
Please open Tools -> Messages (set Verbosity to 2) before you start the Icecast directory, and then paste the full resulting log here or on Pastebin.com if it's too long.
Then create a new ticket on the VLC Trac with the links to your log and to this thread:
https://trac.videolan.org/vlc/
Re: [Bug] Error in parsing Icecast Radio Directory
Posted: 04 Dec 2020 09:49
by oasis123
Please open Tools -> Messages (set Verbosity to 2) before you start the Icecast directory, and then paste the full resulting log here or on Pastebin.com if it's too long.
Then create a new ticket on the VLC Trac with the links to your log and to this thread:
https://trac.videolan.org/vlc/
I don't have time to comply with the VLC bug tracker reporting instructions. The debug log says:
Code: Select all
main debug: adding: Online Radio FM
lua error: Error while running script C:\Program Files\VideoLAN\VLC\lua\sd\icecast.luac, function main(): ...tras/package/win32/../../../share/lua/sd/icecast.lua:59: attempt to concatenate field '?' (a nil value)
That doesn't mean anything. I already found the internal problem: the xml parser stops when it finds a void field (that's what "nil value") means.
Re: [Bug] Error in parsing Icecast Radio Directory
Posted: 07 Dec 2020 15:07
by 0gre
oasis123:
I appreciate what you've figured out there, but this a non-solution for the average user.
Lotesdelere - I have done as you instructed.
Re: [Bug] Error in parsing Icecast Radio Directory
Posted: 29 Dec 2020 04:13
by jpl-20
Issue quite easy to fix in the original icecast plugin:
Code: Select all
--[[
$Id$
Copyright © 2010 VideoLAN and AUTHORS
Authors: Fabio Ritrovato <sephiroth87 at videolan dot org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
JPL/2020/12/29: Fixed parsing issue: do not add stations where "listen_url" item is empty
--]]
lazily_loaded = false
function lazy_load()
if lazily_loaded then return nil end
require "simplexml"
lazily_loaded = true
end
function descriptor()
return { title="Icecast Radio Directory-JPL fix" }
end
function dropnil(s)
if s == nil then return "" else return s end
end
function main()
lazy_load()
local tree = simplexml.parse_url("http://dir.xiph.org/yp.xml")
for _, station in ipairs( tree.children ) do
simplexml.add_name_maps( station )
local station_name = station.children_map["server_name"][1].children[1]
local station_url = station.children_map["listen_url"][1].children[1]
if station_url ~= nil
then
if station_name == "Unspecified name" or station_name == "" or station_name == nil
then
station_name = station.children_map["listen_url"][1].children[1]
if string.find( station_name, "radionomy.com" )
then
station_name = string.match( station_name, "([^/]+)$")
station_name = string.gsub( station_name, "-", " " )
end
end
vlc.sd.add_item( {path=station.children_map["listen_url"][1].children[1],
title=station_name,
genre=dropnil(station.children_map["genre"][1].children[1]),
nowplaying=dropnil(station.children_map["current_song"][1].children[1]),
uiddata=station.children_map["listen_url"][1].children[1]
.. dropnil(station.children_map["server_name"][1].children[1]),
meta={
["Listing Source"]="dir.xiph.org",
["Listing Type"]="radio",
["Icecast Bitrate"]=dropnil(station.children_map["bitrate"][1].children[1]),
["Icecast Server Type"]=dropnil(station.children_map["server_type"][1].children[1])
}} )
end
end
end
For average vlc user:
- Copy the code above to a new file, name it icecast-new.lua
- Go to vlc install dir, then to lua/sd
- Remove the original icecast.luac file
- Add the icecast-new.lua file
- Run vlc and enjoy
Re: [Bug] Error in parsing Icecast Radio Directory
Posted: 29 Dec 2020 14:34
by fubber289
yaaaaaaaaaay, nice one , thank you for engineering and sharing that fix.
very average user here needed to do a bit of extra fiddling to find the file on mac :
the location of plugin on my mac was /Applications/VLC.app//Contents/MacOS/share/lua/sd/
in terminal, using sudo su we we copied the icecast.luac to icecast.luacold , deleted the original icecast.luac and used vi to create a new icecast.luac and then pasted the script above, saved, restarted vlc , all good!
Re: [Bug] Error in parsing Icecast Radio Directory
Posted: 04 Feb 2021 10:25
by blenheimgooner
Any chance of fixing this bug? Would be wonderful for those of us that are less technically literate - and much appreciated.
Re: [Bug] Error in parsing Icecast Radio Directory
Posted: 22 Jul 2021 13:06
by Neuk2015
At the moment I cannot devote the time I would need to fix this bug. But I can assure anybody if you following the instrutions like we used to when we were young and just learning things, it will make sense. I am not a dev, and I anticipate taking a few wrong turns along the way.
And I'm going to risk being flamed. And I can tell you it this upsets you, grow up and stop complaining! The guys who developed VLC and do the work of maintaining it are not American. They do not react to being yelled at when and enduser tries a solution to a problem and it doesn't magically disappear. It sometimes requires more concentration and focus than you are used to using to fix a problem.
I had a situation with VLC a few years ago and I could not figure out how to fix it. I actually wrote to Jean-Baptiste (forgive me if I have your name wrong). I very politely explained that I'd failed using every solution I could think of. And if he could offer at least part of a solution I could appreciate it. He was very gracious in his reply. I never used that privilege again, but the point is, it you're going to act like an infant who has thrown your toys out of your pram, chances are you're going to be treated like one.
Re: [Bug] Error in parsing Icecast Radio Directory
Posted: 14 Nov 2021 20:30
by Hitchhiker
Issue quite easy to fix in the original icecast plugin:
For average vlc user:
- Copy the code above to a new file, name it icecast-new.lua
- Go to vlc install dir, then to lua/sd
- Remove the original icecast.luac file
- Add the icecast-new.lua file
- Run vlc and enjoy
Excellent script, but I would recommend users to simply use it to create a new icecast.luac file instead of calling it something else and then use it to overwrite the existing one. I've posted instructions in this thread on how to do that.
https://forum.videolan.org/viewtopic.ph ... 77#p522477
My post also includes before and after images which might be useful to peeps.