Hi3519运行gpac中的MP4BOX,所遇问题及解决方法

        上一篇文章介绍了海思Hi3519交叉编译gpac的步骤。成功后会在gpac/bin/gcc下生成许多文件,这里不一一详述了,网上有很多参考资料,这里只说会用到的文件:MP4Box,libgpac.so.8,libgpac.so.8.0.0。其中 :MP4Box是可执行文件,也就是样例主程序。libgpac.so.8和libgpac.so.8.0.0是主程序运行需要的动态库文件。

        需要将libgpac.so.8和libgpac.so.8.0.0放入/usr/local/lib/下(或者其他LD_LIBRARY_PATH能找到的位置,也可以自行修改LD_LIBRARY_PATH增加路径)。否则运行MP4Box时会有如下提示:

# ./MP4Box -h
./MP4Box: can't load library 'libgpac.so.8'

放入库文件之后,再次运行以上命令,可以看到帮助信息,说明主程序正常运行了。如下所示:

# ./MP4Box -h
MP4Box [option] input [option]
 -h general           general options help
 -h hint              hinting options help
 -h dash              DASH segmenter help
 -h import            import options help
 -h encode            encode options help
 -h meta              meta handling options help
 -h extract           extraction options help
 -h dump              dump options help
 -h swf               Flash (SWF) options help
 -h crypt             ISMA E&A options help
 -h format            supported formats help
 -h rtp               file streamer help
 -h live              BIFS streamer help
 -h atsc              ATSC3 reader help
 -h all               all options are printed

 -nodes               lists supported MPEG4 nodes
 -node NodeName       gets MPEG4 node syntax and QP info
 -xnodes              lists supported X3D nodes
 -xnode NodeName      gets X3D node syntax
 -snodes              lists supported SVG nodes
 -languages           lists supported ISO 639 languages
 -boxes               lists all supported ISOBMF boxes and their syntax

 -quiet               quiet mode
 -noprog              disables progress
 -v                   verbose mode
 -logs                set log tools and levels, formatted as a ':'-separated list of toolX[:toolZ]@levelX
 -log-file FILE       sets output log file. Also works with -lf FILE
 -log-clock or -lc    logs time in micro sec since start time of GPAC before each log line.
 -log-utc or -lu      logs UTC time in ms before each log line.
 -version             gets build version
 -- INPUT             escape option if INPUT starts with - character

        程序能够运行只是万里长征走完了第一步。前方还有很多艰难险阻。

        笔者在运行命令将一个h264格式的文件转为mp4时遇到了问题,如下所示:

/mnt/nfs # ./MP4Box -add stream_chn0.h265 stream_chn0.mp4
HEVC import - frame size 3840 x 2160 at 25.000 FPS
Error writing data (No space left on device): 1 blocks to write but 0 blocks written
Error importing stream_chn0.h265: I/O Error

        很明显是磁盘空间不够了。但令人费解的是笔者所选取的是/mnt/nfs路径,应该空间很大,理论上不存在空间不够的问题。而且通过df、top、free等命令也没有什么异常。到底是什么原因?网上搜索,都只是停留在介绍MP4Box如何运行,以及gpac库怎样编译,看来这个问题是鲜有人遇到了,只能靠自己解决了。

        在板子上运行telnetd命令,这样就可以通过telnet登录打开一个新的终端了。串口终端再次运行以上命令,telnet终端通过df命令进行监视,发现“/”下的剩余空间一直在减少,到上述命令运行后出现的进度条的7%左右空间就满了(笔者开发环境中的rootfs空间较小),程序也就退出了。

        程序退出的原因找到了,但是为什么在/mnt/nfs/下运行的程序,源文件和目标文件也都保存在/mnt/nfs下,过程中仍然会占用“/”下的空间?这恐怕就要深入研究gpac的源码了,那是个大工程……

        这回也不用上网找解决办法了,之前捎带脚帖子都看过了,都是一些基本的使用命令举例,没有一个特别深入讲解的帖子。

        看gpac程序中的帮助提示,发现有一个-tmp选项:" -tmp dirname         specifies directory for temporary file creation\n"。抱着试一试的态度,笔者在之前的命令后加入了 这个选项,新命令如下:

/mnt/nfs # ./MP4Box -add stream_chn0.h265 stream_chn0.mp4 -tmp /mnt/nfs

HEVC import - frame size 3840 x 2160 at 25.000 FPS
HEVC Import results: 1104 samples (1252 NALUs) - Slices: 37 I 1067 P 0 B - 37 SEI - 37 IDR
Saving stream_chn0.mp4: 0.500 secs Interleaving

        这次很快就成功完成了,问题解决。通过这个问题,可以看出由于是刚刚接触,对于gpac还有很多理解不到的地方,这需要在今后慢慢熟悉、理解、掌握……

猜你喜欢

转载自blog.csdn.net/phmatthaus/article/details/106789749