1. <pre name="code" class="cpp"><pre name="code" class="cpp">/*
  2. arm-linux-gcc -o yuv2264  yuv2264.c -I/usr/local/ffmpeg_arm/include/   -L/usr/local/ffmpeg_arm/lib/ -lswresample -lavformat -lavutil -lavcodec -lswscale -lx264   libSDL.a
  3. */
  4. #include "stdio.h"
  5. #include "stdlib.h"
  6. #include "libavformat/avformat.h"
  7. #include "libavdevice/avdevice.h"
  8. #include "libswresample/swresample.h"
  9. #include "libavutil/opt.h"
  10. #include "libavutil/channel_layout.h"
  11. #include "libavutil/parseutils.h"
  12. #include "libavutil/samplefmt.h"
  13. #include "libavutil/fifo.h"
  14. #include "libavutil/intreadwrite.h"
  15. #include "libavutil/dict.h"
  16. #include "libavutil/mathematics.h"
  17. #include "libavutil/pixdesc.h"
  18. #include "libavutil/avstring.h"
  19. #include "libavutil/imgutils.h"
  20. #include "libavutil/timestamp.h"
  21. #include "libavutil/bprint.h"
  22. #include "libavutil/time.h"
  23. #include "libavutil/threadmessage.h"
  24. #include "libavfilter/avcodec.h"
  25. #include "libavcodec/avcodec.h"
  26. #if HAVE_SYS_RESOURCE_H
  27. #include <sys/time.h>
  28. #include <sys/types.h>
  29. #include <sys/resource.h>
  30. #elif HAVE_GETPROCESSTIMES
  31. #include <windows.h>
  32. #endif
  33. #if HAVE_GETPROCESSMEMORYINFO
  34. #include <windows.h>
  35. #include <psapi.h>
  36. #endif
  37. #if HAVE_SYS_SELECT_H
  38. #include <sys/select.h>
  39. #endif
  40. #if HAVE_TERMIOS_H
  41. #include <fcntl.h>
  42. #include <sys/ioctl.h>
  43. #include <sys/time.h>
  44. #include <termios.h>
  45. #elif HAVE_KBHIT
  46. #include <conio.h>
  47. #endif
  48. #if HAVE_PTHREADS
  49. #include <pthread.h>
  50. #endif
  51. #include <time.h>
  52. #include "libavutil/avassert.h"
  53. #define MAX_LEN  1024 * 50
  54. int main()
  55. {
  56. //下面初始化h264解码库
  57. //avcodec_init();
  58. av_register_all();
  59. avcodec_register_all();
  60. /* find the video encoder */
  61. AVCodec *videoCodec = avcodec_find_encoder(CODEC_ID_H264);//得到264的编码器类
  62. if(!videoCodec)
  63. {
  64. printf("avcodec_find_decoder error\n");
  65. return -1;
  66. }
  67. /*AVCodecParserContext *avParserContext = av_parser_init(CODEC_ID_H264);//得到解析帧类,主要用于后面的帧头查找
  68. if(!avParserContext)
  69. {
  70. printf("av_parser_init  error\n");
  71. return -1;
  72. }*/
  73. AVCodecContext *codec_ = avcodec_alloc_context3(videoCodec);//编码会话层
  74. if(!codec_)
  75. {
  76. printf("avcodec_alloc_context3  error\n");
  77. return -1;
  78. }
  79. //初始化参数,下面的参数应该由具体的业务决定
  80. codec_->time_base.num = 1;
  81. codec_->time_base.den = 25;//帧率
  82. codec_->gop_size = 1;
  83. codec_->max_b_frames = 1;
  84. codec_->thread_count = 1;
  85. codec_->pix_fmt = PIX_FMT_YUV420P;
  86. //codec_->frame_number = 1; //每包一个视频帧
  87. //codec_->codec_type = AVMEDIA_TYPE_VIDEO;
  88. codec_->bit_rate = 1000000;
  89. codec_->width = 720;//视频宽
  90. codec_->height = 576;//视频高
  91. if(avcodec_open2(codec_, videoCodec, NULL) < 0)//打开编码器
  92. {
  93. printf("avcodec_open2 error\n");
  94. return -1;
  95. }
  96. FILE *myH264 = fopen("t.264", "wb");
  97. if(myH264 == NULL)
  98. {
  99. perror("cant open 264 file\n");
  100. return -1;
  101. }
  102. FILE *yuvfile = fopen("my264.yuv", "rb");
  103. if(yuvfile == NULL)
  104. {
  105. perror("cant open YUV file\n");
  106. return -1;
  107. }
  108. int readFileLen = 1;
  109. char readBuf[MAX_LEN];
  110. printf("readBuf address  is %x\n", readBuf);
  111. //
  112. int outbuf_size=100000;
  113. unsigned char * outbuf= malloc(outbuf_size);
  114. int u_size=0;
  115. AVPacket avpkt;
  116. unsigned char * yuv_buf= malloc(720*576*3/2);
  117. AVFrame *m_pYUVFrame=malloc(sizeof(AVFrame));
  118. int flag=0;
  119. while(1)
  120. {
  121. int len = fread(yuv_buf,720*576*3/2,1,yuvfile);
  122. if(len<=0)
  123. {
  124. printf("read over\n");
  125. break;
  126. }
  127. else
  128. {
  129. avpicture_fill((AVPicture*)m_pYUVFrame,(unsigned char *)yuv_buf,PIX_FMT_YUV420P,720,576);
  130. int got_packet_ptr =0;
  131. av_init_packet(&avpkt);
  132. avpkt.data=outbuf;
  133. avpkt.size=outbuf_size;
  134. while(1)
  135. {
  136. u_size = avcodec_encode_video(codec_,outbuf,outbuf_size,m_pYUVFrame);
  137. if(u_size>0 && u_size<100000)
  138. {
  139. m_pYUVFrame->pts++;
  140. fwrite(avpkt.data,1,u_size,myH264);
  141. flag++;
  142. break;
  143. }
  144. }
  145. }
  146. // if(flag>20)break;
  147. }
  148. avcodec_close(codec_);
  149. av_free(codec_);
  150. fclose(yuvfile);
  151. fclose(myH264);
  152. }
  153. </pre><br><br></pre>

嵌入式linux------ffmpeg移植 编码H264(am335x编码H264)的更多相关文章

  1. 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

    深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...

  2. 嵌入式linux系统移植(一)

    内容:   交叉编译环境   bootloader功能子系统   内核核心子系统   文件系统子系统要点:  搭建交叉编译环境  bootloader的选择和移植  kernel的配置.编译.移植和调 ...

  3. 嵌入式Linux系统移植——uboot常用命令

    flash的一般分区: 其它数据 环境变量 可执行程序.如bootloader print(可缩写为:pri):打印查看uboot这个软件中集成的环境变量setenv.saveenv:设置.保存环境变 ...

  4. 嵌入式Linux系统移植(二)——交叉编译工具集

    常用工具:readelf.size.nm.strip.strings.objdump.objcopy.addr2line readelf:读可执行文件的elf头 ELF Header: Magic: ...

  5. 手把手带你基于嵌入式Linux移植samba服务

    摘要:Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成. 本文分享自华为云社区<嵌入式Linux下移植samba服务--<基于北斗和4G ca ...

  6. 嵌入式linux和嵌入式android系统有什么区别和联系?

    转自:http://bbs.eeworld.com.cn/thread-430437-1-1.html 这个问题很多人问,尤其是初入嵌入式的菜鸟.其实大家都认为android是java,已经不是lin ...

  7. FFMPEG H264/H265 编码延迟问题

    最新使用FFmpeg进行H264的编码时,发现视频编码有延迟,不是实时编码.进过一番研究发现,仅仅要在调用avcodec_open2函数 打开编码器时,设置AVDictionary參数就可以.关键代码 ...

  8. H264视频编码成MP4文件

    firehood的专栏 Wince嵌入式开发       目录视图 摘要视图 订阅 赠书 | AI专栏(AI圣经!<深度学习>中文版)      每周荐书:Kotlin.分布式.Keras ...

  9. 开发RTSP 直播软件 H264 AAC 编码

    上一篇对摄像头预览,拍照做了大概的介绍,现在已经可以拿到视频帧了,在加上 RTSP 实现,就是直播的雏形,当然还要加上一些 WEB 管理和手机平台的支援,就是一整套直播软件. 介绍一些基础概念:RTP ...

  10. 采集音频和摄像头视频并实时H264编码及AAC编码[转]

    0. 前言 我在前两篇文章中写了DirectShow捕获音视频然后生成avi,再进行264编码的方法.那种方法有一些局限性,不适合实时性质的应用,如:视频会议.视频聊天.视频监控等.本文所使用的技术, ...

随机推荐

  1. 09_Python深拷贝、浅拷贝

    一.循环列表,删除其中的元素 l1 = [1,2,3,4,5,6,7]  循环删除奇数位元素 1.正序循环删除,会出现越界情况,所以采用倒叙的方式删除 l1 = [1,2,3,4,5,6,7] for ...

  2. ABP官方文档翻译 5.3 OData集成

    OData集成 介绍 安装 安装Nuget包 设置模块依赖 配置实体 创建控制器 配置 示例 获取实体列表 Request Response 获取单个实体 Request Response 使用导航属 ...

  3. 下载vlc遭遇网络劫持

    一次偶然的机遇,在公司下载"vlc播放器",下载之后安装完就变成了"搜狗手机助手".而且连续几次下载都是这样,我以为是我安装了搜狗输入法的缘故.        ...

  4. 洛谷 [P1113] 杂务

    图论的做法是topsort 一看见有序我们就想到了DAG图,于是用topsort做,对于每一个加入队列的顶点,都用它的时间去更新它所指向的点的时间,本质上仍是DP的思想,dp[i]=max{dp[j] ...

  5. 51NOD 1238 最小公倍数之和 V3 [杜教筛]

    1238 最小公倍数之和 V3 三种做法!!! 见学习笔记,这里只贴代码 #include <iostream> #include <cstdio> #include < ...

  6. BZOJ 1042: [HAOI2008]硬币购物 [容斥原理]

    1042: [HAOI2008]硬币购物 题意:4种硬币.面值分别为c1,c2,c3,c4.1000次询问每种硬币di个,凑出\(s\le 10^5\)的方案数 完全背包方案数? 询问太多了 看了题解 ...

  7. Linux系统下LNMP一键搭建Linux、PHP、MySQL环境(适合新手搭建linux下的web生成环境)

    一. 首先要解释一下,什么是LNMP,LNMP起源于LAMP,LAMP是Linux+Apache+Mysql/MariaDB+Perl/PHP/Python的缩写,这里将Web服务端的Apache替换 ...

  8. 【SSH框架】之Spring系列(一)

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.前言 前面更新过几篇关于 Struts2 框架和 Hibernate 框架的文章,但鉴于这两 ...

  9. CentOS 7 搭建基于携程Apollo(阿波罗)配置中心单机模式

    Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性.服务端基于Spring Boot ...

  10. java thread 线程锁同步,锁,通信

    12.线程同步 当多个线程访问同一个数据时,非常容易出现线程安全问题.这时候就需要用线程同步 Case:银行取钱问题,有以下步骤: A.用户输入账户.密码,系统判断是否登录成功 B.用户输入取款金额 ...