Android NDK 直播推流与引流,程序员面试题网站

Windows 下利用 ffplay 进行引流,命令行执行:

ffplay rtmp://192.168.0.0/live/test

ip 地址换成流媒体服务器的地址, test 表示直播房间号

测试结果:

2.推流


本文直播推流步骤:

  • 使用 AudioRecord 采集音频,使用 Camera API 采集视频数据

  • 分别使用 faac 和 xh264 第三方库在 Native 层对音频和视频进行编码

  • 利用 rtmp-dump 第三方库进行打包和推流

工程目录:

主要的 JNI 方法:

public class NativePush {

public native void startPush(String url);

public native void stopPush();

public native void release();

/**

  • 设置视频参数

  • @param width

  • @param height

  • @param bitrate

  • @param fps

*/

public native void setVideoOptions(int width, int height, int bitrate, int fps);

/**

  • 设置音频参数

  • @param sampleRateInHz

  • @param channel

*/

public native void setAudioOptions(int sampleRateInHz, int channel);

/**

  • 发送视频数据

  • @param data

*/

public native void fireVideo(byte[] data);

/**

  • 发送音频数据

  • @param data

  • @param len

*/

public native void fireAudio(byte[] data, int len);

}

视频采集

视频采集主要基于 Camera 相关 API ,利用 SurfaceView 进行预览,通过 PreviewCallback 获取相机预览数据。

视频预览主要代码实现:

public void startPreview(){

try {

mCamera = Camera.open(mVideoParams.getCameraId());

Camera.Parameters param = mCamera.getParameters();

List<Camera.Size> previewSizes = param.getSupportedPreviewSizes();

int length = previewSizes.size();

for (int i = 0; i < length; i++) {

Log.i(TAG, "SupportedPreviewSizes : " + previewSizes.get(i).width + “x” + previewSizes.get(i).height);

}

mVideoParams.setWidth(previewSizes.get(0).width);

mVideoParams.setHeight(previewSizes.get(0).height);

param.setPreviewFormat(ImageFormat.NV21);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值