嵌入式linux------ffmpeg移植 编码H264(am335x编码H264)
- <pre name="code" class="cpp"><pre name="code" class="cpp">/*
- 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
- */
- #include "stdio.h"
- #include "stdlib.h"
- #include "libavformat/avformat.h"
- #include "libavdevice/avdevice.h"
- #include "libswresample/swresample.h"
- #include "libavutil/opt.h"
- #include "libavutil/channel_layout.h"
- #include "libavutil/parseutils.h"
- #include "libavutil/samplefmt.h"
- #include "libavutil/fifo.h"
- #include "libavutil/intreadwrite.h"
- #include "libavutil/dict.h"
- #include "libavutil/mathematics.h"
- #include "libavutil/pixdesc.h"
- #include "libavutil/avstring.h"
- #include "libavutil/imgutils.h"
- #include "libavutil/timestamp.h"
- #include "libavutil/bprint.h"
- #include "libavutil/time.h"
- #include "libavutil/threadmessage.h"
- #include "libavfilter/avcodec.h"
- #include "libavcodec/avcodec.h"
- #if HAVE_SYS_RESOURCE_H
- #include <sys/time.h>
- #include <sys/types.h>
- #include <sys/resource.h>
- #elif HAVE_GETPROCESSTIMES
- #include <windows.h>
- #endif
- #if HAVE_GETPROCESSMEMORYINFO
- #include <windows.h>
- #include <psapi.h>
- #endif
- #if HAVE_SYS_SELECT_H
- #include <sys/select.h>
- #endif
- #if HAVE_TERMIOS_H
- #include <fcntl.h>
- #include <sys/ioctl.h>
- #include <sys/time.h>
- #include <termios.h>
- #elif HAVE_KBHIT
- #include <conio.h>
- #endif
- #if HAVE_PTHREADS
- #include <pthread.h>
- #endif
- #include <time.h>
- #include "libavutil/avassert.h"
- #define MAX_LEN 1024 * 50
- int main()
- {
- //下面初始化h264解码库
- //avcodec_init();
- av_register_all();
- avcodec_register_all();
- /* find the video encoder */
- AVCodec *videoCodec = avcodec_find_encoder(CODEC_ID_H264);//得到264的编码器类
- if(!videoCodec)
- {
- printf("avcodec_find_decoder error\n");
- return -1;
- }
- /*AVCodecParserContext *avParserContext = av_parser_init(CODEC_ID_H264);//得到解析帧类,主要用于后面的帧头查找
- if(!avParserContext)
- {
- printf("av_parser_init error\n");
- return -1;
- }*/
- AVCodecContext *codec_ = avcodec_alloc_context3(videoCodec);//编码会话层
- if(!codec_)
- {
- printf("avcodec_alloc_context3 error\n");
- return -1;
- }
- //初始化参数,下面的参数应该由具体的业务决定
- codec_->time_base.num = 1;
- codec_->time_base.den = 25;//帧率
- codec_->gop_size = 1;
- codec_->max_b_frames = 1;
- codec_->thread_count = 1;
- codec_->pix_fmt = PIX_FMT_YUV420P;
- //codec_->frame_number = 1; //每包一个视频帧
- //codec_->codec_type = AVMEDIA_TYPE_VIDEO;
- codec_->bit_rate = 1000000;
- codec_->width = 720;//视频宽
- codec_->height = 576;//视频高
- if(avcodec_open2(codec_, videoCodec, NULL) < 0)//打开编码器
- {
- printf("avcodec_open2 error\n");
- return -1;
- }
- FILE *myH264 = fopen("t.264", "wb");
- if(myH264 == NULL)
- {
- perror("cant open 264 file\n");
- return -1;
- }
- FILE *yuvfile = fopen("my264.yuv", "rb");
- if(yuvfile == NULL)
- {
- perror("cant open YUV file\n");
- return -1;
- }
- int readFileLen = 1;
- char readBuf[MAX_LEN];
- printf("readBuf address is %x\n", readBuf);
- //
- int outbuf_size=100000;
- unsigned char * outbuf= malloc(outbuf_size);
- int u_size=0;
- AVPacket avpkt;
- unsigned char * yuv_buf= malloc(720*576*3/2);
- AVFrame *m_pYUVFrame=malloc(sizeof(AVFrame));
- int flag=0;
- while(1)
- {
- int len = fread(yuv_buf,720*576*3/2,1,yuvfile);
- if(len<=0)
- {
- printf("read over\n");
- break;
- }
- else
- {
- avpicture_fill((AVPicture*)m_pYUVFrame,(unsigned char *)yuv_buf,PIX_FMT_YUV420P,720,576);
- int got_packet_ptr =0;
- av_init_packet(&avpkt);
- avpkt.data=outbuf;
- avpkt.size=outbuf_size;
- while(1)
- {
- u_size = avcodec_encode_video(codec_,outbuf,outbuf_size,m_pYUVFrame);
- if(u_size>0 && u_size<100000)
- {
- m_pYUVFrame->pts++;
- fwrite(avpkt.data,1,u_size,myH264);
- flag++;
- break;
- }
- }
- }
- // if(flag>20)break;
- }
- avcodec_close(codec_);
- av_free(codec_);
- fclose(yuvfile);
- fclose(myH264);
- }
- </pre><br><br></pre>
嵌入式linux------ffmpeg移植 编码H264(am335x编码H264)的更多相关文章
- 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)
深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...
- 嵌入式linux系统移植(一)
内容: 交叉编译环境 bootloader功能子系统 内核核心子系统 文件系统子系统要点: 搭建交叉编译环境 bootloader的选择和移植 kernel的配置.编译.移植和调 ...
- 嵌入式Linux系统移植——uboot常用命令
flash的一般分区: 其它数据 环境变量 可执行程序.如bootloader print(可缩写为:pri):打印查看uboot这个软件中集成的环境变量setenv.saveenv:设置.保存环境变 ...
- 嵌入式Linux系统移植(二)——交叉编译工具集
常用工具:readelf.size.nm.strip.strings.objdump.objcopy.addr2line readelf:读可执行文件的elf头 ELF Header: Magic: ...
- 手把手带你基于嵌入式Linux移植samba服务
摘要:Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成. 本文分享自华为云社区<嵌入式Linux下移植samba服务--<基于北斗和4G ca ...
- 嵌入式linux和嵌入式android系统有什么区别和联系?
转自:http://bbs.eeworld.com.cn/thread-430437-1-1.html 这个问题很多人问,尤其是初入嵌入式的菜鸟.其实大家都认为android是java,已经不是lin ...
- FFMPEG H264/H265 编码延迟问题
最新使用FFmpeg进行H264的编码时,发现视频编码有延迟,不是实时编码.进过一番研究发现,仅仅要在调用avcodec_open2函数 打开编码器时,设置AVDictionary參数就可以.关键代码 ...
- H264视频编码成MP4文件
firehood的专栏 Wince嵌入式开发 目录视图 摘要视图 订阅 赠书 | AI专栏(AI圣经!<深度学习>中文版) 每周荐书:Kotlin.分布式.Keras ...
- 开发RTSP 直播软件 H264 AAC 编码
上一篇对摄像头预览,拍照做了大概的介绍,现在已经可以拿到视频帧了,在加上 RTSP 实现,就是直播的雏形,当然还要加上一些 WEB 管理和手机平台的支援,就是一整套直播软件. 介绍一些基础概念:RTP ...
- 采集音频和摄像头视频并实时H264编码及AAC编码[转]
0. 前言 我在前两篇文章中写了DirectShow捕获音视频然后生成avi,再进行264编码的方法.那种方法有一些局限性,不适合实时性质的应用,如:视频会议.视频聊天.视频监控等.本文所使用的技术, ...
随机推荐
- 窗口缩小div内容隐藏看不到怎么解决?
div的宽度设置为100%,并设置其背景颜色,但当窗口发生变化出现横向滚动条,拉滚动条的时候发现右面是空白的. 解决方法:body{min-width:1024px},给body加上一个最小宽度.ie ...
- PLSQL Developer软件使用大全
PLSQL Developer软件使用大全 第一章 PLSQL Developer特性 PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发.如今,有越来越 ...
- 《Thinking in Java》学习笔记(一)
服务器端的编程可以参考另一本书<企业Java编程>(Thinking in Enterprise Java). 1.基本类型 基本型别 大小 最小值 最大值 默认值 boolean -- ...
- BZOJ 2178: 圆的面积并 [辛普森积分 区间并]
2178: 圆的面积并 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 1740 Solved: 450[Submit][Status][Discus ...
- 简单DNA序列组装(非循环子图)
生物信息学原理作业第四弹:DNA序列组装(非循环子图) 原理:生物信息学(孙啸) 大致思想: 1. 这个算法理解细节理解比较困难,建议看孙啸的生物信息学相关章节. 2. 算法要求所有序列覆盖整个目标D ...
- oneNote总结
22.添加附加文件删除后,文件大小没有发生改变的(优化文件和清空回收站)
- js中sum(2,3,4)和sum(2)(3)(4)都返回9并要求扩展性
网上有很多关于sum(1)(2)(3),sum(1,2,3)之类的面试题要求输出相同的结果6并要求可以满足扩展,即有多个参数时也能符合题设的要求,所以自己写了部分例子可以大概满足这些面试题的要求 &l ...
- JDBC【事务、元数据、改造JDBC工具类】
1.事务 一个SESSION所进行的所有更新操作要么一起成功,要么一起失败 举个例子:A向B转账,转账这个流程中如果出现问题,事务可以让数据恢复成原来一样[A账户的钱没变,B账户的钱也没变]. 事例说 ...
- Phone文件备份
一 把照片导入到本地 连接手机和PC,插上数据线后PC上会自动检测并弹出对话框,提示导入 可以指定导入的目录.确定之后点击导入即可开始执行导入操作. 二 把语音备忘录导入到本地 需要借助iTunes联 ...
- dedecms实现编辑文章时不自动修改发布时间
dedecms默认编辑文章时自动修改文章的发布时间,如何让它不自动修改发布时间呢? 找到后台编辑文章的模板文件稍作调整即可. 文件/dede/templets/artical_edit.htm 把 $ ...