一 FFmpeg报错误 -22(Invalid argument)
这个错误确实浪费了我一晚上,为啥呢,因为我打开rtsp的地址是能播放的,但是换成http://xxx/HD.live.mp4?auth_key=xxx这种带鉴权的地址后,就报非法参数了。
长话短说,出现这个错误的原因可能是:
- 1)err = avformat_open_input(&ic, is->_filename.c_str(), is->_iformat, &is->_format_opts);的_filename文件名不对。
- 2)没调用av_register_all()。
- 3)ffmpeg版本不对。
第1个比较常见,但是我想说的是我这次不是这点导致的,而是ffmpeg版本不对,因为我尝试调用了av_register_all(),但是还是不行,而且我确认过这个流地址在vlc以及我自己其它的播放demo都是没问题的。
那么我是怎么猜到可能是ffmpeg版本库的问题呢,
- 1)因为我自己能播放的demo和报错的这份代码是一样的,不一样的只有ffmpeg版本库,所以我尝试把库换掉,结果就好了。
- 2)而且报错的ffmpeg版本是能打开rtsp的地址并播放的,但是换成http://xxx/HD.live.mp4?auth_key=xxx这种带鉴权的地址后,就报非法参数了。估计是这个版本对一些字符解析的不太准确,例如带问号、等号等等,具体的可以自行看源码。
报错版本:ffmpeg-4.3.1,64位(这个是我从官网下载的)。 换成ffmpeg-4.2.1,64位就没问题了(这份是我自己源码编译的)。