ffmpeg开发出现的问题(四) ftp/rstp/ts 流输出
之于使用ffmpeg完成流的输入和流的输出. 之前一直以为困难重重, 做好看协议的打算了.阅读源码方晓新版的ffmepg支持流的输入和流的输出.现在测试通过了. 实现的仅仅是最简单的ftp流输入/转码/ftp流输出. 并且效果和本地的文件一样,速度亦不相上下.实在是值得记录的大事之一.
网上关于流的输入或者输出,都是怎么实现协议和封装般的长篇累牍. 资料更是寥若星辰, 针对不同的应用, 亦是五花八门. 让初学者望而生畏. 所谓解决方法只是表象, 源码才是王道. 现将调试问题记录之, 以飨来者
1. 流的输入和输出, 路径, 端口, 用户名, 密码, 权限. 这些是开发之前最基本的问题. 针对ftp问题, 之前忘记了写权限, 默认搭建的服务器是只读的, 这个花费了很长时间
2. 用到的函数av_guess_format("ftp", NULL, NULL); 发现这个函数无用, 被包含在avio_open()函数中, 调用这个函数,返回的是空,导致后面操作段错误
3. AVFormatContext *cc=avformat_alloc_context();如果用这个函数来分配容器,对应里面好多数据都是空的.应该用avformat_alloc_output_context(); 看这个函数的源码发现,里面更严谨,更可靠
4.开发步骤:
~ 先本地完成读入文件/转码/写入文件
这一步在ffmpeg的/doc/example中有好多已经实现,不过每个程序对应的只是里面其中的一个步骤 , 要做的工作是, 根据需求, 把这些功能组合起来
~ 添加读入文件, 改成流的形势, 这个只要搭好环境就行了
~ 写入文件, 这步就得写好各个配置了. 最主要的是avio_open函数, 看下源码, 赋值, 调试到这一步后, 看ftp服务器有没有检测到连接. 否则是你这边出问题了