android webrtc数据网络,webrtc android 视频编码后数据回调

src/sdk/android/api/org/webrtc/VideoEncoder.java中定义数据编码后的回调接口.

public interface Callback {

/** Call to return an encoded frame. */

void onEncodedFrame(EncodedImage frame, CodecSpecificInfo info);

}

这个接口由c++层调用java函数,在java层的函数中对这个接口进行实现。c++层代码(src/sdk/android/src/jni/videodecoderwrapper.cc)

int32_t VideoEncoderWrapper::InitEncodeInternal(JNIEnv* jni) {

bool automatic_resize_on;

switch (codec_settings_.codecType) {

case kVideoCodecVP8:

automatic_resize_on = codec_settings_.VP8()->automaticResizeOn;

break;

case kVideoCodecVP9:

automatic_resize_on = codec_settings_.VP9()->automaticResizeOn;

break;

default:

automatic_resize_on = true;

}

//...

//...

jobject callback = Java_VideoEncoderWrapper_createEncoderCallback(

jni, jlongFromPointer(this));

jobject ret =

Java_VideoEncoder_initEncode(jni, *encoder_, settings, callback);

}

java层代码(src/sdk/android/src/java/org/webrtc/VideoEncoderWrapper.java),实现callback接口。

@CalledByNative

static VideoEncoder.Callback createEncoderCallback(final long nativeEncoder) {

//实现接口

return (EncodedImage frame, VideoEncoder.CodecSpecificInfo info)

-> nativeOnEncodedFrame(nativeEncoder, frame.buffer, frame.encodedWidth,

frame.encodedHeight, frame.captureTimeNs, frame.frameType.getNative(),

frame.rotation, frame.completeFrame, frame.qp);

}

@NativeClassQualifiedName("webrtc::jni::VideoEncoderWrapper")

private static native void nativeOnEncodedFrame(long nativeEncoder, ByteBuffer buffer,

int encodedWidth, int encodedHeight, long captureTimeNs, int frameType, int rotation,

boolean completeFrame, Integer qp);

根据jni函数命名规则,寻找nativeOnEncodedFrame对应c++函数时,找不到相应的函数。注意nativeOnEncodedFrame函数前面有这样@NativeClassQualifiedName字符串,webrtc中有NativeClassQualifiedName.java这个文件,我只是知道nativeOnEncodedFrame对应的c++层函数就是(src/sdk/android/src/jni/videodecoderwrapper.cc)中的OnEncodedFrame函数。至于java是怎么通过annotation将两者对应起来的,并不是很清楚,对java中的annotation不熟。

c++层的OnEncodedFrame函数,将编码后的数据post到队列中。

void VideoEncoderWrapper::OnEncodedFrame(JNIEnv* jni,

jobject j_caller,

jobject j_buffer,

jint encoded_width,

jint encoded_height,

jlong capture_time_ns,

jint frame_type,

jint rotation,

jboolean complete_frame,

jobject j_qp)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值