第七季2:移植MP4v2库 与 将H.264码流打包成MP4格式的文件

以下内容源于朱有鹏课程的学习与整理,如有侵权请告知删除。

前言

本文首先移植MP4V2库,然后运行修改后的sample代码以生成MP4文件。

利用MP4v2库,可以将编码方式为H264的视频码流打包、封装为MP4格式的文件。

一、移植MP4v2库

1、下载MP4v2库并解压

(1)下载地址:2.0.0~dfsg0-6 : mp4v2 package : Ubuntu。

(2)将源码包解压至/home/xjh/iot/hisi_development/mp4/mp4v2-2.0.0目录。

root@ubuntu:/home/xjh/iot/hisi_development/mp4/mp4v2-2.0.0# ls
aclocal.m4  configure     COPYING  GNUmakefile.am  include  libplatform  project  src
autoaux     configure.ac  doc      GNUmakefile.in  INSTALL  libutil      README   util
root@ubuntu:/home/xjh/iot/hisi_development/mp4/mp4v2-2.0.0# 

2、配置与编译

(1)在/home/xjh/iot/hisi_development/mp4/mp4v2-2.0.0目录下创建_install文件夹(作为安装目录),然后执行以下命令(即执行该目录下的configure脚本,并传一些参数进去)。

sudo PATH=$PATH:/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-gcc ./configure --host=arm-hisiv300-linux --prefix=/home/xjh/iot/hisi_development/mp4/mp4v2-2.0.0/_install --disable-option-checking --disable-debug --disable-optimize --disable-fvisibility --disable-gch --disable-largefile --disable-util --disable-dependency-tracking --disable-libtool-lock

(2)执行make,然后执行make install。

执行make时如果出错如下,则执行“source /etc/profile”。

./libtool: line 984: arm-hisiv300-linux-gcc: command not found
make: *** [src/3gp.lo] Error 1

(3)如果安装成功,在_install目录下会生成一些待部署的文件。其中bin目录下是一些可执行的二进制文件,lib目录下是库文件(其中.a文件与静态链接库有关,编译与链接时使用;.so文件与动态链接库有关,链接与运行时使用),include目录下的文件在编译时会用到。

root@ubuntu:/home/xjh/iot/hisi_development/mp4/mp4v2-2.0.0/_install# ls
bin  include  lib  share
root@ubuntu:/home/xjh/iot/hisi_development/mp4/mp4v2-2.0.0/_install#

3、部署相关文件

(1)将上面生成的lib目录下的所有文件,拷贝到Hi3518E_SDK_V1.0.3.0/mpp/lib目录中。

root@ubuntu:/home/xjh/iot/hisi_development/mp4/mp4v2-2.0.0/_install/lib# ls
libmp4v2.a  libmp4v2.la  libmp4v2.so  libmp4v2.so.2  libmp4v2.so.2.0.0
root@ubuntu:/home/xjh/iot/hisi_development/mp4/mp4v2-2.0.0/_install/lib# cp * /home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/mpp/lib/
root@ubuntu:/home/xjh/iot/hisi_development/mp4/mp4v2-2.0.0/_install/lib# 

(2)将上面生成的include目录下的所有文件,拷到Hi3518E_SDK_V1.0.3.0/mpp/include目录中。

root@ubuntu:/home/xjh/iot/hisi_development/mp4/mp4v2-2.0.0/_install/include# ls
mp4v2
root@ubuntu:/home/xjh/iot/hisi_development/mp4/mp4v2-2.0.0/_install/include# cp * /home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/mpp/include/ -rf
root@ubuntu:/home/xjh/iot/hisi_development/mp4/mp4v2-2.0.0/_install/include# 

(3)将上面生成的lib目录下的*so*文件,拷贝到板载系统的/lib目录中。

此时因为spiflsh容量不足而报错,为了腾出spiflash空间,分别做了两方面的工作。

第一,使用strip工具缩小动态链接库的文件大小。

动态链接库即.so文件中包含着调试符号信息,这些符号会占用一定的空间。在传统的嵌入式系统中flash空间是有限的,为了节省flash空间,需要把这些符号信息去掉。之所以可以将这些符号信息去掉,是因为这些信息是用来调试的,在程序运行时是没用的。

root@ubuntu:/home/xjh/iot/hisi_development/mp4/mp4v2-2.0.0/_install/lib# ls
libmp4v2.a  libmp4v2.la  libmp4v2.so  libmp4v2.so.2  libmp4v2.so.2.0.0
root@ubuntu:/home/xjh/iot/hisi_development/mp4/mp4v2-2.0.0/_install/lib# arm-linux-strip *so*
root@ubuntu:/home/xjh/iot/hisi_development/mp4/mp4v2-2.0.0/_install/lib# 

第二,挂载TF卡,然后将/ko目录内容移动到TF卡中。

1)将TF卡格式化为FAT32文件系统(在windows中进行快速格式化时选择这个选项)。

2)把TF卡插进开发板,确保TF卡可用(blk是块设备的简写,mmcblk就是mmc或者sd卡,0就是这个mmc或者sd卡的顺序编号,p1就是分区)。

/mnt # himci: card disconnected! #拔掉卡时显示的信息
mmc1: card aaaa removed
himci: card connected! #将卡插入卡槽显示的信息
himci: mmc1: valid phase shift [1, 7] Final Phase 4
mmc1: new ultra high speed SDR104 SDHC card at address aaaa
mmcblk0: mmc1:aaaa SC16G 14.8 GiB mmcblk0: p1/mnt # ls /dev/mmc*  #确保被识别、可用
/dev/mmcblk0    /dev/mmcblk0p1
/mnt # 

3)首先在板载系统上创建/usr/mmc目录,然后执行“mount -t vfat /dev/mmcblk0p1 /usr/mmc”,挂载成功后,将/ko目录剪切到/usr/mmc目录中。

4)在开发板的/etc/profle文件末尾添加内容如下:

mount -t vfat /dev/mmcblk0p1 /usr/mmccd /usr/mmc/ko
./load3518e -i -sensor ar0130 -osmem 32 -total 64mount -t nfs -o nolock 192.168.1.141:/home/xjh/iot/hisi_development/hisi_rootfs /mntcd /mnt

二、将H.264码流打包成MP4格式文件

(1)完成上面操作后,将提供的sample目录复制到虚拟机Hi3518E_SDK_V1.0.3.0/mpp目录下,修改目录名为“sample_mp4_ar0130”(只是为了区别之前实验的sample目录)。

(2)进入sample_mp4_ar0130/venc目录下,修改Makefile文件如下(即修改lib的路径,要根据自己实际的lib路径修改):

$(TARGET):%:%.o $(COMM_OBJ)$(CC) $(CFLAGS) -lpthread -lm -o $@ $^ $(MPI_LIBS) $(AUDIO_LIBA) $(SENSOR_LIBS) -lmp4v2 -lstdc++ -lm -L /home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/mpp/lib

(3)在venc目录下执行make,将samp_venc文件拷至/home/xjh/iot/hisi_development/hisi_rootfs目录下(方便将来在开发板的/mnt目录下执行)。

(4)在板载系统/mnt目录下执行“ ./sample_venc ”。注意让它一直执行,直到显示“close mp4 file”时才可以按“ctrl+c”终止程序,否则最终的视频文件打不开。

/mnt # ./sample_venc
MPP Ver  HI_VERSION=Hi3518EV200_MPP_V1.0.3.0 B040 Release
RTSP:-----Init Rtsp server
s32ChnNum = 1
=============SAMPLE_COMM_VI_SetMipiAttr enWDRMode: 0
linear mode
Aptina AR0130 sensor 720P30fps init success!
please press twice ENTER to exit this sample
s32ChnTotal =1 
Write sps =================
Write pps -------------------
Write date type = 6  isSyncSample = 0
Write date type = 5  isSyncSample = 1
Write date type = 1  isSyncSample = 0
Write date type = 1  isSyncSample = 0
Write date type = 1  isSyncSample = 0
Write date type = 1  isSyncSample = 0
Write date type = 1  isSyncSample = 0//省略部分close mp4 file

(5)在板载系统的/usr/mmc/目录下(源码规定的目录)可以看到test.mp4文件。将该文件复制到板载系统的/mnt目录,则可以在虚拟机中/home/xjh/iot/hisi_development/hisi_rootfs目录下看到该文件,把它移动到共享文件夹,在windows主机中打开该文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新高考不选物理可以学计算机吗,新高考选科中物理真的那么重要吗?没有选物理是不是完了?...

文/圆梦志愿 伏老师众所周知,选科是我国新高考中最重要的事情之一,且涉及到了多门选考科目。其中,要数物理的话题性相对最强。那么,高考选科是不是物理特别重要?新高考没有选物理是不是完了?一、高考选科是…

参加第三届信息化创新克拉玛依国际学术论坛

据老孙说前二届在克拉玛依的数字油田的会议规格很高,可惜一直没机会参加。2014年9月3日至4日举办第三届,无论如何抓住了这次机会,不过会议的内容有些让我失望,克拉玛依的心思已经放在数字城市上了,数字油田的主题被冲淡…

UNICODE,GBK,UTF-8区别

简 单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是一兼容的,同一个汉字, 那三个码值是完全不一样的.如"汉"的unco…

学生使用计算机中怎么关机,学会正确开关机初中计算机教案

第1篇:学会正确开关机初中计算机教案学会正确开、关机教案教学目的和要求学会开、关机教学难点:1、了解计算机外设的开、关顺序2、正确学会开、关机教学准备:计算机、网络教学过程():一、教学导入同学们,在你们面前看到…

Telnet远程登录 与 海思proc文件系统

以下内容源于朱有鹏嵌入式课程的学习与整理, 如有侵权请告知删除。 内容总结 (1)添加“ telnet远程登录 ”这种调试方式。 (2)介绍“ 海思proc文件系统 ”这种调试接口。 一、telnet远程登录 1、telnet远程登录的意…

北邮-上机-提交错误解决及一些经验

2019独角兽企业重金招聘Python工程师标准>>> 1、出现Time Limit Exceed问题 答:三种原因:1、程序死循环或太多的循环;2、对极限状况计算量太大,需要优化程序,如对10000个以上进行排序必须使用快速排序&…

study notes for python

some useful materials Python完全新手教程 http://www.cnblogs.com/taowen/articles/11239.aspx (from taowen, BITer) Note: Part 1 Basic Data Structure List, Dict(dictionary) and Turple are three main data structures in python, which are respond to set,mapping a…

html如何制作滑块,网页制作html5实现滑块功能之type=quot;rangequot;属性-建站-建站教程-建站方法-米云建站 - 米云问答...

html5实现滑块功能之type"range"属性1.html5中添加了关于滑块的标签,其实际是扩展了input标签,type属性值为range。2.感觉挺有意思,就做了一个关于滑块的动画的例子,可以通过开始和结束按钮来控制滑块的滑动和停止,有点类似视频的自动播放和暂…

第七季3:分析“将H.264码流打包成MP4格式的文件”的源码

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 前言 “将H.264MP4码流打包成MP4格式文件”的实验,见博文第七季2:MP4v2库的移植与播放实战。 接下来我们将对相关的源码进行分析。建立SI工程,导入sample_mp4_…

什么代码才是线程安全的

转自:http://www.cnblogs.com/lidabo/archive/2013/04/10/3011518.html 对于多线程编程,很多人概念不清,写代码的时候要么是处处加锁,影响性能不说,还容易莫名其妙的死锁,还有人对多线程敬而远之。所以学习…

百度富文本编辑器的应用技巧---在一个页面中使用多个样式不同功能不同的编辑器...

//1.2.4以后可以使用一下代码实例化编辑器 //UE.getEditor(myEditor)在官方的说明文档上看到这个注释&#xff0c;不是很明白&#xff0c;而且需要在一个页面中使用多次样式功能不同的ueditor&#xff0c;经过多次测试&#xff0c;终于成功自定义功能。代码如下<form><…

计算机基础知识复习题,计算机基础知识理论复习题及答案.doc

《计算机基础知识理论复习题及答案.doc》由会员分享&#xff0c;提供在线免费全文阅读可下载&#xff0c;此文档格式为doc&#xff0c;更多相关《计算机基础知识理论复习题及答案.doc》文档请在天天文库搜索。1、&#xfeff;基础知识复习题及答案一、 选择题1. 第三代计算机所…

RAM、ROM和FLASH三大类常见存储器简介

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考博客&#xff1a; Flash、RAM、ROM的区别_天籁东东的博客-CSDN博客_flash和rom的区别 RAM、ROM和FLASH三大类常见存储器简介 - 存储技术 - 电子发烧友网 RAM、NANDFlash、NORFlash的区别详解 - 百度…

SHELL中的IF判断 ​

SHELL中的IF判断shell中if做比较比较两个字符串是否相等的办法是&#xff1a;if [ "$test"x "test"x ]; then这里的关键有几点&#xff1a;1 使用单个等号2 注意到等号两边各有一个空格&#xff1a;这是unix shell的要求3 注意到"$test"x最后的…

wangeditor html编辑,Vue整合wangEditor富文本编辑器

最近在做项目时&#xff0c;客户有个发布新闻动态的功能&#xff0c;具体页面内容让客户自己编写&#xff0c;所以要选择富文本编辑器&#xff0c;这样用户体验好一点。网上有很多的富文本编辑器&#xff0c; 因为项目的功能并不是很复杂&#xff0c;所以选择了wangEditor&…

SqlSever分页查询,仅扫描一次表

数据库的分页查询一般由两个查询组成&#xff1a; select count(*) from Goods 和 select * from (select row_number() over(order by goodsId) as rowid, *from Goods ) as a where rowid > pageSize * (pageIndex - 1) 1 and rowid < pageSize * pageIndex 第一个查询…

嵌入式基础认识2:shell脚本的一些简单语法规则

一、关于shell的一些认识 1、shell语言&#xff0c;是一类编程语言。常用shell语言有sh、bash、csh、ksh、perl、python等。linux下最常用的脚本就是bash。 2、shell脚本&#xff0c;即把在命令行中输入的命令写成程序。这样可以避免反复地在命令行下手工输入命令的繁琐工作。…

DreamWeaver连接Tomcat用以编辑和测试JSP

2019独角兽企业重金招聘Python工程师标准>>> 3 、打开软件之后&#xff0c;大家选择【站点】中的【新建站点】 。 4 、填写要填的内容。 站点名称&#xff1a;可以随便起&#xff0c;只是用来区分站点用的。因为&#xff0c;可以建立多个站点。 本地根文件夹&…

2013多校第三场

hdu 4629 题意&#xff1a;给你n个三角形&#xff0c;问覆盖1~n次的面积各是多少&#xff0c;n < 50; 分析&#xff1a;取出所有端点和交点的x坐标&#xff0c;排序&#xff0c;然后对于每一段xi~xi1的范围的线段都是不相交的&#xff0c;所以组成的 面积要么是三角形&#…

TSS 任务状态段

TSS(任务状态段)1 什么是TSS TSS 全称task state segment&#xff0c;是指在操作系统进程管理的过程中&#xff0c;任务&#xff08;进程&#xff09;切换时的任务现场信息。 2 TSS工作细节 TSS在任务切换过程中起着重要作用&#xff0c;通过它实现任务的挂起和恢复。所谓…