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還有很多理解不到的地方,這需要在今後慢慢熟悉、理解、掌握……

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章