日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

解決ffmpeg讀取視頻流時,報錯“Segmentation fault (core dumped)“,avformat_open_input 返回 -1330794744

作者:宋小江@ 更新時間: 2022-08-28 編程語言

錯誤現象:

  • ffmpeg讀取視頻流時,直接報錯返回“Segmentation fault (core dumped)”;
  • 排查中發現是avformat_open_input函數錯誤,返回的是-1330794744,而不是代表正確的0。

這個問題困擾了我很久,網上也搜了很久,但解決辦法中都沒提及ffmpeg的版本,在試錯很多次后,發現了問題的所在,是代碼與ffmpeg的版本有些不兼容的問題,那就直接切入主題。



這次我試了ffmpeg的兩個大版本:(一定對照自己的版本來看)

  • ffmpeg-n4.4-latest-linux64-gpl-shared-4.4.tar.xz (這是github上別人編譯好的)(在ubuntu和windows上都能直接跑起來)

    • 這個版本我在我的centos7上跑不起來,make就會報類似這樣的錯:“/opt/ffmpeg/lib/libavcodec.so: undefined reference to _ZGVcN4vv_pow@GLIBC_2.22
      /opt/ffmpeg/lib/libavcodec.so: undefined reference to _ZGVeN16v_expf@GLIBC_2.22
      /opt/ffmpeg/lib/libavcodec.so: undefined reference to _ZGVbN2v_exp@GLIBC_2.22
      /opt/ffmpeg/lib/libavcodec.so: undefined reference to _ZGVbN2vv_pow@GLIBC_2.22’”
    • warning說是因為缺乏libmvec.so.1這個庫,顯然因為glibc版本的問題(我centos的glibc是2.17的,版本太低,yum暫時最高就是這,不能yum升級;手動去升級話,是有可能會把系統弄崩的,所以要慎重,特別生產環境一定慎重,虛擬機可以先拍一個快照);
    • 然后我在一個centos虛擬機上,手動編譯glibc,把glibc升級到2.25,就能成功運行;
    • 查看glibc版本的命令:ldd --version

  • FFmpeg-n3.4.9 (這個是自己源碼編譯的)

    • 這個在glibc為2.17的centos7上能make能成功,但是一運行,就報錯"Segmentation fault (core dumped)”,排查是avformat_open_input()函數返回的是-1330794744,解決辦法很簡單,在你代碼main()函數開頭加這樣兩行:

      av_register_all();

      avformat_network_init();

    • 這應該是在ffmpeg版本4后,是沒有這倆api了,網上的解決辦法也總是直接說加這兩行,也沒說版本,這要是加了這兩行的代碼使用上面ffmpeg-n4.4版本,編譯都是會直接報錯的。

嗯,說的是很詳細了,別的錯誤情況也說到了,也是自己反復各種嘗試,ffmpeg都編譯了十多次,還以為是自己預編譯指令沒給對,所以重點是,一定要注意自己的ffmpeg版本是多少,看你報錯是上面哪種,對癥下藥。
所以如果有幫到你,請點個贊吧!

原文鏈接:https://blog.csdn.net/nianjiuhuiyi/article/details/126518444

欄目分類
最近更新