亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

利用ffmpeg來進行視頻解碼的完整示例代碼(H.26

系統 1718 0
  1. Decode()?
  2. {?
  3. FILE ?*?inpf;?
  4. ?
  5. int ?nWrite;?
  6. int ?i,p;?
  7. int ?nalLen;?
  8. unsigned? char *?Buf;?
  9. int ?got_picture,?consumed_bytes;?
  10. unsigned? char ?*DisplayBuf;?
  11. DisplayBuf=(unsigned? char ?*)malloc(60000);?
  12. ?
  13. char ?outfile[]?=? "test.pgm" ;?
  14. ?
  15. //1.打開輸入文件 ?
  16. inpf?=?fopen( "test.264" ,? "rb" );?
  17. ?
  18. //outf?=?fopen("out.yuv",?"wb"); ?
  19. ?
  20. if (!inpf)?
  21. {?
  22. goto ?Decodereturn;?
  23. }?
  24. ?
  25. nalLen?=?0;?
  26. Buf?=?(unsigned? char *)calloc?(?1000000,? sizeof ( char ));? //準備解碼文件緩沖 ?
  27. ?
  28. //2.注冊解碼器,并且找到H264解碼器 ?
  29. avcodec_init();?
  30. avcodec_register_all();?
  31. codec?=?avcodec_find_decoder(CODEC_ID_H264);?
  32. ?
  33. if ?(!codec)?{?
  34. return ?0;?
  35. }?
  36. //allocate?codec?context ?
  37. //分配解碼器內存 ?
  38. c?=?avcodec_alloc_context();?
  39. ?
  40. if (!c){?
  41. return ?0;?
  42. }?
  43. //open?codec ?
  44. //3.打開解碼器 ?
  45. if ?(avcodec_open(c,?codec)?<?0)?{?
  46. return ?0;?
  47. }?
  48. ?
  49. //allocate?frame?buffer ?
  50. //分配解碼器用的幀緩沖 ?
  51. picture?=?avcodec_alloc_frame();?
  52. if (!picture){?
  53. return ?0;?
  54. }?
  55. ?
  56. rgbdatanew?=?(unsigned? char ?*)malloc( sizeof (unsigned? char )*(3?*?width?*?height));?
  57. ?
  58. while (!feof(inpf))?
  59. {?
  60. ?
  61. //4.獲取下一個NAL的長度,并且將NAL放入Buf ?
  62. nalLen?=?getNextNal(inpf,?Buf);?
  63. ?
  64. //5.對改NAL解碼,解碼的YUV數據存在picture中 ?
  65. consumed_bytes=?avcodec_decode_video(c,?picture,?&got_picture,?Buf,?nalLen);?
  66. ?
  67. if (consumed_bytes?>?0)?
  68. {?
  69. ?
  70. //6.將picture中的YUV數據顯示或者保存到文件 ?
  71. p=0;?
  72. for (i=0;?i<c->height;?i++)?
  73. {?
  74. memcpy(DisplayBuf+p,picture->data[0]?+?i?*?picture->linesize[0],?c->width);?
  75. p+=c->width;?
  76. }?
  77. for (i=0;?i<c->height/2;?i++)?
  78. {?
  79. memcpy(DisplayBuf+p,picture->data[1]?+?i?*?picture->linesize[1],?c->width/2);?
  80. p+=c->width/2;?
  81. }?
  82. for (i=0;?i<c->height/2;?i++)?
  83. {?
  84. memcpy(DisplayBuf+p,picture->data[2]?+?i?*?picture->linesize[2],?c->width/2);?
  85. p+=c->width/2;?
  86. }?
  87. //顯示畫面 ?
  88. DisplayVideo(DisplayBuf);?
  89. }?
  90. }?
  91. ?
  92. //7.關閉輸入文件 ?
  93. if (inpf)?
  94. fclose(inpf);?
  95. ?
  96. Decodereturn:?
  97. ?
  98. //8.關閉解碼器,釋放解碼器內存 ?
  99. if (c)?{?
  100. avcodec_close(c);?
  101. av_free(c);?
  102. c?=?NULL;?
  103. }?
  104. //9.釋放解碼畫面內存 ?
  105. if (picture)?{?
  106. av_free(picture);?
  107. picture?=?NULL;?
  108. }?
  109. ?
  110. //10.釋放解碼文件緩沖 ?
  111. if (Buf)?
  112. {?
  113. free(Buf);?
  114. Buf?=?NULL;?
  115. }?
  116. ?
  117. free(DisplayBuf);?
  118. }?

利用ffmpeg來進行視頻解碼的完整示例代碼(H.264)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲乱码视频在线观看 | 国产成人在线视频免费观看 | 毛片看 | 在线视频不卡国产在线视频不卡 | 青青青在线视频播放免费 | 免费二区 | 欧美不卡视频在线 | 好吊在线视频 | 韩国日本三级在线观看 | 日韩中文字幕网站 | 久久er国产精品免费观看1 | 免费欧洲毛片a级视频老妇女 | 色香视频在线 | 久久久久久久综合色一本 | 四虎影院成人在线观看 | 国产精品国内免费一区二区三区 | 精品日本久久久久久久久久 | 成熟女人免费一级毛片 | 成人a在线观看 | 亚洲香蕉一区二区三区在线观看 | 91国在线 | 天天上天天操 | 日本精品中文字幕在线不卡 | 91成人在线 | 高清一级做a爱过程免费视频 | 99国产精品欧美久久久久久影院 | 亚洲一区二区三区免费观看 | 一级美国乱色毛片 | 91福利视频在线 | 色婷婷综合久久久 | 五月中文字幕 | 99精品久久99久久久久久 | 欧美性xxxx另类 | 99热国产这里只有精品 | 久久99精品久久久久久噜噜丰满 | 欧美性色欧美a在线观看 | 在线免费不卡视频 | 亚洲国产成人久久三区 | 久久免费精品视频在线观看 | 午夜日韩 | 日本手机在线视频 |