Witnesses said the bus went through a closed crossing barrier, and passengers said they screamed "Stop, stop!" at the driver just before impact.
Officials said 30 people were injured, 10 critically, at the peak of Ottawa's morning rush hour. The cause of the crash was not yet clear, said John Manconi with bus operator OC Transpo. Transit union president Craig Watson said the driver was killed.
It was Canada's second major rail accident this year. It comes after an oil train derailed and exploded in a Quebec town in July, killing 47 people.
"People started screaming, 'Stop, stop!' because they could see the train coming down the track," Trepanier said. Witnesses said the bus plowed through a lowered crossing barrier and into the side of the passing, four-car train.
The locomotive and one passenger car derailed. Via Rail said there were no reports of major injuries to train passengers or crew. Via Rail canceled trains on its Ottawa-Toronto route.
Passenger Gregory Mech said the bus was approaching a train crossing where there is about a 90-degree bend. Mech said he didn't think the driver noticed that signals were flashing and that the barrier was down.
Rebbecca Guilbeault, who was on the bus with her 1-year-old son, said she had put him in a stroller just before the crash and said people piled on top of him.
"I don't know if the bus driver blacked out. He didn't slow down, and it just impacted with the train," Guilbeault said. "I've seen a few people dead, someone ripped in half." Witness Mark Cogan said the rail barrier was down.
