More than 1,000 demonstrators protesting hikes in public transport fares overran the main train, metro and bus station in Rio Thursday, in the latest flare-up of simmering social tensions ahead of this year's World Cup in Brazil.
Police fired tear gas to try to disperse the protesters but in the end people rode trains for free and screamed "the station is free."
A cameraman for the Bandeirantes network was hit in the head with some kind of explosive device, and had to undergo surgery. He was listed in serious condition, the O Globo newspaper reported.
Protesters, some wearing masks or clad in black, destroyed automatic bank teller machines and threw rocks at riot police.
Several streets near the station were blocked off with flaming barricades.
"The only ones being violent are police. I saw one attack a guy just for carrying a banner," said Natacha de Pina, who works at a bank in the station.
"We threw things at the police because we suffer every day. Three reais is absurd," she said referring to the new higher bus fare.
Authorities said eight people were treated for injuries and newspaper O Globo said 20 were detained.
The demonstrators fought running battles with police, who charged the crowd attempting to clear the area around the main bus station.
The protest started peacefully but turned violent.
An AFP reporter saw an injured policeman being evacuated and also saw officers beating demonstrators.
"We won't pay three reais" and "we want FIFA-standard trains," marchers shouted, referring to football's world governing body. Three reais is $1.25.
That refers to the 9 percent increase in bus fares imposed on Saturday.
Brazil has witnessed widespread public anger at the billions of dollars being spent on the World Cup in a country lacking good public transport and struggling with sagging education and health infrastructure.
Some protesters vandalised ticket machines and set ablaze a barricade.
The protest, called by the Pasa Livre (free passage) movement, was far smaller, however, than those which marred last year's Confederations Cup.
Then, nationwide protests brought more than a million people into the streets.
It was a proposed 0.20 reais increase in Sao Paulo last year which sparked the initial protests.