之前调试过在android手机上 读取摄像头 然后 rtmp推流 或者用ffmpeg拉RTSP的流
这次是需要将Android手机当成一个IPC摄像头,在手机上起一个rtsp server的功能,然后客户端可以直接观看手机摄像头的内容 :
今天刚调试能出来 有点乱 简单记录下:
先看下效果图
启动app显示如下:
点击Test QMCY 左上方按钮上显示的是手机上摄像头的总个数
点一下按钮会在不通摄像头之间切换
电脑上用vlc打开 rtsp流地址 即可看到手机上摄像头的实时视频流
项目工程结构:
这个RTSP 用的是 之前花钱买的一个带源码的RTSP版本,本身是支持Android
IOS WINDOWS Linux 嵌入式Linux等等,
但是 android版本一直没弄好 。就在原来的嵌入式linux版本上移植过来了
刚开始调试的时候是直接推RTMP服务器的 也可以直接观看 ,后来起RTSP服务器 推流的时候 看不起来 分析码流 发现 mediacodec直接编码出来的码流 只有 I帧和P帧 没有SPS PPS的数据
如下图:
可以发现只有实时码流只有I帧和P帧 没有SPS PPS信息 。
但是不知道为什么RTMP的可以观看 ,根据以往的经验就直接把SPS PPS和I帧拼接成一帧了
MediaCodec可以得到SPS PPS 的数据
然后检测到I帧的时候 将SPS PPS 和I帧 拼接成一个packet发送出去 ,这样 vlc就正常能观看视频了
对java不太熟悉 不太确定这段代码有没有问题 不过当成demo还是ok的