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

本文详细记录了如何在Ubuntu环境下移植MP4v2库,并通过修改后的sample代码将H264视频码流打包成MP4文件的过程。包括下载库文件,配置、编译、部署库文件到指定目录,以及修改Makefile文件以生成可执行文件,并在板载系统上执行生成MP4文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

前言

本文首先移植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/mmc

cd /usr/mmc/ko
./load3518e -i -sensor ar0130 -osmem 32 -total 64

mount -t nfs -o nolock 192.168.1.141:/home/xjh/iot/hisi_development/hisi_rootfs /mnt

cd /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主机中打开该文件。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天糊土

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值