记一次FFMPEG转avi视频保存到ftp服务器的失败尝试
来源:互联网 发布:mac版 帝国时代2hd 编辑:程序博客网 时间:2024/05/17 01:04
项目中有一需求,将存储在硬盘上的h264码流转成Avi文件,并上传到FTP服务器。首先想到是用ffmpeg将h264转换成avi格式的文件,保存到本地磁盘,一切正常,很快完成了。
正当以为结束时,突然发现,需求方是要求保存到FTP服务器的,我一想,要将将转换好的视频放到内存中,再使用FTP客户端接口上传到服务器,这样做有点麻烦。于是上官网找了一下资料,发现FFMPEG支持FTP、HTTP、UDP、TCP、RTSP等等众多协议。于是重新配置支持FTP重新编译,很快又完成了。一开始遇到一个很奇怪的错误,后来才意识到是FTP目录路径不存在导致,看了源代码,FFMPEG的FTP模块使用PWD在判断当前目录是否存在,但不会创建目录的。于是自己手动创建,可以看到服务器上有文件了。用vlc播放器播放,正常,但用kmplayer播放不了。用UE打开看二进制,发现头部表示AVI文件大小的字段全为FF,文件最后没有idx1索引信息,怪不得kmplayer播不了。——这些判断,是基于好多年前研究AVI格式的经验,根据目测就能知道了。
于是跟踪代码,发现FFMPEG写尾部数据函数中并没有写idx1,再看原来有个seekable标志,为1时表示可以进行seek操作,而FTP模块又支持并赋值,看不出问题。后来几经打印跟踪,发现FTP默认是不使能seek的,而这,在官网的说明中很清楚了。又一次因看文档不详细而耗时。
后来找如果通过AVOptions来赋值,但发现不行,因为FTPContext是私有的,不对外公开。于是放弃,在FFMPEG源代码中直接将seekable置为1,这回可以seek了,但一看服务器上的文件,只有区区6KB,注释掉写尾部数据函数又变回原来的样子。上overstack看人家遇到的问题,有人回复说有的FTP不支持seek,一旦用了,文件会截断的。从代码分析得知,第一个有seek操作的是查找movi字段,刚好是头部数据,6KB,和测试的结果一样。后来想过往这个方向上继续走,但因为不同的FTP特性不同,万一有的服务器不支持,岂不是白搞?于是就放弃了。
这个问题,纠结了一周多了。这次应该要趁机学习学习FFMPEG一点东西了。
李迟,2015.5.26,与高中同学夜宵回来写的
- 记一次FFMPEG转avi视频保存到ftp服务器的失败尝试
- 一起来写ftp server 02 -- 一次失败的尝试
- ffmpeg .avi视频转码
- DexClassLoader一次失败的尝试
- opencv保存的avi视频不能打开
- opencv保存avi视频
- 关于分页的一次失败的尝试
- 一次失败的视频面试
- ffmpeg之将avi格式的视频和音频分离
- ffmpeg 转换mkv到avi
- ffmpeg推本地视频到rtmp服务器
- 上传视频到FTP服务器+播放
- 记一次失败的尝试--ubuntu下把笔记本无线网卡的驱动替换掉
- ffmpeg avi转h264
- ffmpeg h264转avi
- 记一次失败的kaggle比赛(1):赛题简介与初次尝试
- Win7下尝试编译Fast RCNN---- 一次失败的经历
- 手机模块化梦想:Google的一次失败尝试
- 【举例2】Docker环境部署过程,用ushios/lamp-ubuntu镜像,来创建容器,并安装禅道系统
- Mac系统升级到10.9(mavericks)时安装php扩展问题解决
- Spring整合hibernate配置文件
- <Unity UGUI> 在Unity5 的UGUI系统上实现图片的遮罩
- 贵阳大数据峰会
- 记一次FFMPEG转avi视频保存到ftp服务器的失败尝试
- nodejs中使用多线程编程的方法实例
- 实时大数据设计策略
- 手把手教你打造一个Material Design风格的App(三)
- (二)“HelloWorld!”by Python
- jQuery以什么开头,结尾。。。
- Linux Shell脚本攻略(1.3)
- Codeforces Round #304 (Div. 2)——A.B.C.D.E
- 深入解析Windows第四版笔记