1.ffmpeg支持CONFIG_PIPE_PROTOCOL协议,说白了就是命令管道的使用。
pipe的使用和file的使用是一样的,不同的一点在于file是可以去不断的去读取和seek的,这样在ffmpeg中就会把pipe协议当成一种流媒体来处理。
也就是URLContext->is_streamed的类型。
2.在什么情况下使用ffmpeg的pipe呢?
现在android上最常见的播放流媒体的方式有两种,一种是file的方式,一种就是网络的形式。但是现在类似IPTV的数据处理不是这两种方式,需要实现数据的实时输出。这种是APK通过各种协议把数据处理完以后传递下来的,用传统的两种方式并没有办法管理这些数据,这个时候就需要使用的ffmpeg的pipe功能了。
3.先完成两个可执行文件,完成基于linux下的pipe的动能。
3.1 以下代码实现有名管道的写入功能(TestWriteBin)
#define FIFO_NAME "/data/iptv_hls_pipe"
int main()
{
FILE* file = NULL;
int fifo_fd;
if(access(FIFO_NAME, F_OK) == -1)
{
fifo_fd = mkfifo(FIFO_NAME, 0777);
if(fifo_fd < 0)
{
return 0;
}
}
fifo_fd = open(FIFO_NAME, O_WRONLY);