android ffmpeg rtmp,Android利用ffmpeg产生推流

Android利用ffmpeg产生推流

Android利用ffmpeg产生推流

目标

在安卓手机客户端有一个视频文件,利用ffmpeg产生推流。

借助nginx-rtmp-module推送给另一客户端(简单起见用PC上的VLC)。

VLC播放这个视频流。

本次实验重点是第一步,即利用ffmpeg产生推流。

1、获得ffmpeg库

1/1 可以直接在ffmpeg官网下载源码,在Ubuntu下借助NDK编译得到.so库。关于这点,可以参照https://trac.ffmpeg.org/wiki/CompilationGuide/Android

1/2 还可以借助github上的开源项目https://github.com/WritingMinds/ffmpeg-android-java

2、使用ffmpeg库

ffmpeg原本是一个支持多种平台的命令行工具。

如果使用的是1/1方法。可以直接修改ffmpeg的main方法,以实现直接jni方式对ffmpeg的调用。

如果使用的是1/2方法。那就直接使用命令行输入/输出方式来调用ffmpeg。

这里使用1/2方法

核心代码

try {

ffmpeg.execute(new String[]{

"-re",

"-i",

"/sdcard/DCIM/Camera/test.avi",

"-vcodec",

"libx264",

"-acodec",

"aac",

"-f",

"flv",

"-strict",

"-2",

"rtmp://192.168.42.248:1935/myapp/test"}, new ExecuteBinaryResponseHandler() {

@Override

public void onStart() {

Log.i("yuyong", "onStart");

}

@Override

public void onProgress(String message) {

Log.i("yuyong", "onProgress-->" + message);

}

@Override

public void onFailure(String message) {

Log.i("yuyong", "onFailure-->" + message);

}

@Override

public void onSuccess(String message) {

Log.i("yuyong", "onSuccess-->" + message);

}

@Override

public void onFinish() {

Log.i("yuyong", "onFinish");

}

});

} catch (FFmpegCommandAlreadyRunningException e) {

Log.i("yuyong", "FFmpegCommandAlreadyRunningException-->" + e.getMessage());

}

效果

4b85a36bcf490fb39701f13971c402df.png

3、用VLC播放

效果

android ffmpeg rtmp,Android利用ffmpeg产生推流_第1张图片

Android利用ffmpeg产生推流相关教程

你可能感兴趣的:(android,ffmpeg,rtmp)