pili-engineering / PLDroidMediaStreaming

PLDroidMediaStreaming 是七牛推出的一款适用于 Android 平台的推流 SDK,支持 RTMP 推流,h.264 和 AAC 编码,硬编、软编支持。具有丰富的数据和状态回调,方便用户根据自己的业务定制化开发。具有直播场景下的重要功能,如:美颜、背景音乐、水印等功能。PLDroidMediaStreaming 是现在目前重点维护的版本,自带采集模块也支持用户自己做采集端。
https://github.com/pili-engineering/PLDroidMediaStreaming/wiki
Apache License 2.0
1.45k stars 460 forks source link

调用硬编码无法进行推流,软编码有偏色问题,附代码 #245

Open quinnxiao opened 7 years ago

quinnxiao commented 7 years ago

`//准备推流参数 StreamingProfile.AudioProfile aProfile = new StreamingProfile.AudioProfile(44100, 96 1024); StreamingProfile.VideoProfile vProfile = new StreamingProfile.VideoProfile(15, 1000 1024, 48); StreamingProfile.AVProfile avProfile = new StreamingProfile.AVProfile(vProfile, aProfile); StreamingProfile mProfile = new StreamingProfile(); try { mProfile.setPublishUrl(mPublishUrl); } catch (URISyntaxException e) { e.printStackTrace(); return false; } mProfile.setPreferredVideoEncodingSize(1280, 640) .setEncoderRCMode(StreamingProfile.EncoderRCModes.QUALITY_PRIORITY) .setAVProfile(avProfile) .setDnsManager(getMyDnsManager()) .setStreamStatusConfig(new StreamingProfile.StreamStatusConfig(3)) .setSendingBufferProfile(new StreamingProfile.SendingBufferProfile(0.2f, 0.8f, 3.0f, 20 * 1000)) .setBitrateAdjustMode(StreamingProfile.BitrateAdjustMode.Auto);

    mStreamingManager = new StreamingManager(mContext, AVCodecType.HW_VIDEO_CODEC);
    mStreamingManager.prepare(mProfile);

    byte data[] = new byte[width * height * 3 / 2];
    MediaUtil.mergeVideo(buf, data, width, height, buf.length);
    mStreamingManager.inputVideoFrame(data, width, height, 0, false, PLFourCC.FOURCC_NV12, 
     System.nanoTime());
    if (!isRecording) {
        Log.e(TAG, "video end");
        return true;
    }`

上面的AVCodecType设置硬解码无法实现推流,设置HW_VIDEO_YUV_AS_INPUT_WITH_HW_AUDIO_CODEC但是是软解码,帧率很低只有5-8帧左右,而且存在偏色,看文档说PLFourCC.FOURCC_NV12只支持FOURCC_NV21,但是设置了貌似还是没用。请问该怎么解决偏色问题,如何使用硬编码支持呢。谢谢

Jhuster commented 7 years ago

@quinnxiao 请升级到最新版本