C#学习系列之throw new ApplicationException
- 啰嗦
- 问题
- 解决
- 总结
啰嗦
在项目的解码过程中使用到throw new ApplicationException
语句,之前一致没有意识到这句话会带来很多问题。项目中使用这句话来捕捉解码过程中的解码异常问题。
问题
在使用throw new ApplicationException(GetErrorMessage(error));
中,是用throw
来捕捉解码中出现的解码问题,会进行解码提示。每次当出现Error parsing NAL unit #0.
解码问题时,捕捉到异常会直接跳出整个循环,直接跳出到循环外的try catch finally
中的catch
,直接跳出解码线程,导致无法再启动线程。如果使用while
不断循环,这里的解码退出后会不断开辟解码运行流程,但是无法流畅播放。
解决
将throw new ApplicationException(GetErrorMessage(error));
使用break;
进行替代!
解决思路是参考了H264的海思解码,在解码过程中,始终不跳出解码原本的while循环,最多break而已的思路。
从实际使用效果看,再出现相同的解码异常,不会跳出解码异常,并且不用考虑重启解码线程。
总结
这个问题困惑我很久,一直在考虑是否从Error parsing NAL unit #0.
着手,其实也没有很好的思路。在一遍遍的debug中反复跑异常,才意识到可以换个思路解决问题。通过查阅264解码,验证自己的思路可能没有没有,加上不断尝试。
在反反复复回放,解码异常十多遍后,静下心来想问题,这个问题解决了。虽然可能对大家来说是很小的问题,对我来说,是继续努力的动力,加油!