B.
整个句子意思是“当他到达电影院的时候,电影已经放映了半个小时.”(顺便说一下,前半部分是when引导的时间状语从句,后面是主句.)
这个句子描述了发生在过去的事情,肯定是用过去时态.再比较两个事件的发生时间,显然got to 是发生在be on半个小时之后的事了,那么,为了表达电影是在“他到达电影院”之前发生的事,就应该用过去完成时来表示,所以用had been on.
for half an hour表示一段时间“半个小时”;而begin虽然有过去分词begun,但是它不能跟一段时间连用,它是在一个时间点上“发生、开始”,不能说“开始了半个小时”,逻辑不通.