最近在做直播相关应用时,在Android上调用FFmpeg 二进制程序缓存视频无法打开播放。但在电脑终端是可以的。
ffmpeg -i rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov -c copy BigBuckBunny.mp4
仔细观察正在拉流中的文件也是无法打开的
正在缓存的视频
Ctrl+C 终止程序
原来需要终止程序。那调用 process.destroy()
是不就是正常退出了呢?结果发现缓存的视频还是不能打开。后面我已经注意到signal 2
,这关系到 Linux 信號signal處理機制 02 SIGINT中斷,當使用者從鍵盤按ctrl+c鍵
所以安卓上需要发送SIGINT中斷的信号给process.
1.尝试往process 发送Q
OutputStream ostream = process.getOutputStream();
ostream.write("q\n".getBytes());
ostream.flush();
结果视频可以打开了,但是退出process比较慢
2.通过 执行kill pid
命令 , 那Android如何获取process pid 呢。debug时我发现process.toString() 有个数字,是不就是进程ID呢?
public void safeExitProcess(final Process process) {
if (process != null) {
String pid = process.toString().replace("Process[pid=", "").replace("]", "");
FfmpegController.killProcessor(pid, false, false);
}
}
kill -2 pid //SIGINT 中斷,相當使用者從鍵盤按ctrl+c鍵
process的输入流打印的log也有Exiting normally, received signal 2.
内容。视频也被缓存下来了