Tony Pulis' side had the best of the first half and deserved to lead at the interval, but West Ham's much-improved showing after the break earned the home side a point.
Tony Pulis’ side went ahead in the 13th minute when Jon Walters completed a clever corner routine. But the Hammers equalized after the interval through O’Brien, who directed a Gary O’Neil cross beyond Asmir Begovic.
Stoke's Charlie Adam had the first chance of the game in the early stages when he connected with a Peter Crouch knock-down in the penalty area, but he volleyed tamely over the bar.
Crouch and Adam combined again minutes later to force George McCartney to concede a corner, and from the resulting delivery Stoke went ahead, as Walters’ sharp run to the near post allowed him plenty of time and space to drill Glenn Whelan’s precisely-placed cross beyond Jussi Jaaskelainen.
The visitors almost doubled their lead from another corner as Matthew Etherington found Robert Huth, but Jaaskelainen pushed the center back’s header away from danger.
The hosts improved after the break and could have had an equalizer just a minute into the second half, but Kevin Nolan tamely cushioned a well-placed McCartney cross into Begovic’s chest.
West Ham was level moments later, as Mohamed Diame bundled through the Stoke defense and fed O’Neil, whose pass left O’Brien with the simplest of finishes inside the six-yard box.
The Hammers continued to dominate and were nearly in front when Andy Carroll nodded a Mark Noble corner into Modibo Maiga’s path, but Begovic was equal to the striker’s side-footed effort.
With less than an hour to play, Wilson Palacios came on in place of Whelan for Stoke, but the Hammers went close again through O’Neil, whose shot from a narrow angle on the left-hand side curled beyond the far post and out of play.
West Ham pushed for a late winner but Begovic denied Nolan what would have been an open goal by blocking another McCartney delivery before saving a soft Winston Reid header to ensure Stoke left Upton Park with a point. American Geoff Cameron started and played all 90 minutes for Stoke, while U.S. teammate Maurice Edu was again left off of Pulis' team sheet.