C#学习系列之throw new ApplicationException

C#学习系列之throw new ApplicationException

  • 啰嗦
  • 问题
  • 解决
  • 总结


C#学习系列之throw new ApplicationException_第1张图片

啰嗦

在项目的解码过程中使用到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解码,验证自己的思路可能没有没有,加上不断尝试。
在反反复复回放,解码异常十多遍后,静下心来想问题,这个问题解决了。虽然可能对大家来说是很小的问题,对我来说,是继续努力的动力,加油!

你可能感兴趣的:(c#,解决方案,学习,c#,音视频,ffmpeg)