在上篇文章中,我确定了使用的三个库:
h264的编码库也不少,最终选择了x264。aac的编码库,选择了fdkaac。rtmp的库,选择了rtmpdump。
也许是我的编码习惯:先各个击破,再合并整合。我决定也采用这样的方式。这样做的好处很明显:
1.考虑范围缩小。比如,在做x264的编码时,无需考虑aac的编码之类的事情。至于aac能遇到什么问题,可以到aac编码的时候去解决。这样就会变成:每次只做一件事。把这件事做好之后,再接着往下做。
2.易于解决问题。出问题的范围将会大大缩小,只会发生在某一个模块内。这对于我查找问题的原因,debug都有好处。
3.功能内聚性高。当一个模块编译完成之后,只需提供接口给外围调用,减少了外围对具体实现的要求,因为外围可以不用知道里面是怎么实现的。
坏处也是有的:需要为各个模块编写一套工程代码。有多少个模块,就得写多少个工程代码。这就会造成工程代码较多。在整合之前,感觉有点乱。我个人觉得这也是模块化的一个副作用。就像Andorid里面的Library一样。
经过以上的构思,初步认为至少需要4个工程:x264的采集工程,aac的采集工程,和rtmp的传输工程。
接下来就是编码的工作了。实际问题总是比想象的多啊!