解决方案:微信爬虫采集有什么特色?如何破解反爬虫机制?

优采云 发布时间: 2022-11-25 12:36

  解决方案:微信爬虫采集有什么特色?如何破解反爬虫机制?

  微信爬虫采集有什么特点?如何破解反爬虫机制?微信爬虫采集可以采集公众号数据。下面介绍一下微信爬虫采集的特点。请继续阅读。

  爬虫:一种利用任何技术手段批量获取网站信息的方式。

  微信爬虫采集有什么特点?

  1、无需安装,24小时云端采集

  优采云

独创云采集技术,云端管控,24小时采集。无论您身在何处,只要打开电脑即可进行操作和查看。

  

" />

  2、专业应对防爬私密代理IP自动切换,不用担心被反爬

  爬虫自动访问企业私有代理IP,无需担心反屏蔽政策!

  3、标准格式数据自动发布导出,与您现有系统无缝对接

  可以自动发布和导出数据到您的数据库或网站,还支持webhooks,restful接口,无缝快速集成到您现有的系统中

  4.官方维护,持续更新

  搜狗微信突然改版,无法爬取数据?别着急,优采云

工程师会尽快跟进修复,优采云

是官方产品,质量保证!

  

" />

  如何破解反爬虫机制?

  策略一:设置下载延迟,比如数字设置为5秒,越大越安全

  策略 2:禁止 cookie。一些网站会使用cookies来识别微信用户身份。禁用后公众号服务器无法识别爬虫轨迹

  策略 3:使用用户代理池。即每次发送时从池中随机选择不同的浏览器头信息,防止爬虫身份暴露

  策略四:使用IP池,需要大量的IP资源,可以在网上抓取免费的公网IP,搭建自己的IP代理池。

  以上就是小编整理的微信爬虫合集的一些特点,教大家破解反爬虫机制。想了解更多微信公众号内容,请关注伟峰。

  解决方案:基于Webrtc的视频通话录制功能-Android实现

  基于Webrtc-Android实现的视频通话录音功能

  webrtc 本身不支持视频通话录音。webrtc的sdk只对外暴露视频数据,不对外暴露音频数据。因此,如果要录制视频通话,需要修改webrtc的sdk,暴露音频数据。webrtc的下载和编译可以参考之前的文章:WebRtc的下载和编译

  1.修改SDK导出音频数据

  1.音频采集数据提取(mic输入,本地声音)

  webrtc的音频数据采集

在audio_device_java.jar包中,具体类为WebRtcAudioRecord,其在源码中对应位置为:

  src/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java

  a) 在该类中添加如下代码:

  // tanghongfeng add begin

private static WebRtcAudioRecordCallback mWebRtcAudioRecordCallback;

public static void setWebRtcAudioRecordCallback(WebRtcAudioRecordCallback callback) {

   Logging.d("WebRtcAudioRecord", "Set record callback");

   mWebRtcAudioRecordCallback = callback;

}

public interface WebRtcAudioRecordCallback {

   void onWebRtcAudioRecordInit(int audioSource, int audioFormat,

            int sampleRate, int channels, int bitPerSample,

            int bufferPerSecond, int bufferSizeInBytes);

   void onWebRtcAudioRecordStart();

   void onWebRtcAudioRecording(ByteBuffer buffer, int bufferSize,

            boolean microphoneMute);

   void onWebRtcAudioRecordStop();

}

// tanghongfeng add end

  b) 在initRecording方法中添加如下代码:

  private int initRecording(int sampleRate, int channels) {

  ......

   logMainParameters();

   logMainParametersExtended();

   // tanghongfeng add begin

   if (mWebRtcAudioRecordCallback != null) {

       mWebRtcAudioRecordCallback

            .onWebRtcAudioRecordInit(audioSource, 2, sampleRate,

                        channels, 16, 100, bufferSizeInBytes);

  }

   // tanghongfeng add end

   return framesPerBuffer;

}

  c) 在startRecording方法中添加如下代码:

  private boolean startRecording() {

  ......

   try {

       this.audioRecord.startRecording();

       // tanghongfeng add begin

       if (mWebRtcAudioRecordCallback != null) {

           mWebRtcAudioRecordCallback.onWebRtcAudioRecordStart();

      }

       // tanghongfeng add end

  }

  ......

}

  d) 在stopRecording方法中添加如下代码:

  private boolean stopRecording() {

  ......

   this.releaseAudioResources();

   // tanghongfeng add begin

   if(mWebRtcAudioRecordCallback != null) {

       mWebRtcAudioRecordCallback.onWebRtcAudioRecordStop();

  }

   // tanghongfeng add end

   return true;

}

  e) 在内部类AudioRecordThread的run方法中添加如下代码:

  

" />

  @Override

public void run() {

  ......

   while (keepAlive) {

       int bytesRead = audioRecord.read(byteBuffer, byteBuffer.capacity());

       if (bytesRead == byteBuffer.capacity()) {

          ......

           if (keepAlive) {

               nativeDataIsRecorded(bytesRead, nativeAudioRecord);

               // tanghongfeng add begin

               if (mWebRtcAudioRecordCallback != null) {

                   mWebRtcAudioRecordCallback.onWebRtcAudioRecording(byteBuffer,

                                                bytesRead, microphoneMute);

              }

               // tanghongfeng add end

          }

      } else {

          ......

      }

      ......

  }

}

  2.音频网络数据提取(网络传入,对方语音)

  webrtc的音频网络数据提取在audio_device_java.jar包中,具体类为WebRtcAudioTrack,其在源码中对应位置为:

  src/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioTrack.java

  a) 在该类中添加如下代码:

  // tanghongfeng add begin

private static WebRtcAudioTrackCallback mWebRtcAudioTrackCallback;;

public static void setWebRtcAudioTrackCallback(WebRtcAudioTrackCallback callback) {

   Logging.d("WebRtcAudioTrack", "Set track callback");

   mWebRtcAudioTrackCallback = callback;

}

public interface WebRtcAudioTrackCallback {

   void onWebRtcAudioTrackInit(int audioFormat, int sampleRate,

                int channels, int bitPerSample,

                int bufferPerSecond, int minBufferSizeInBytes);

   void onWebRtcAudioTrackStart();

   void onWebRtcAudioTracking(ByteBuffer byteBuffer, int bytesWritten,

                boolean speakerMute);

   void onWebRtcAudioTrackStop();

}

// tanghongfeng add end

  b) 在initPlayout方法中添加如下代码:

  private boolean initPlayout(int sampleRate, int channels) {

  ......

   logMainParameters();

   logMainParametersExtended();

   // tanghongfeng add begin

   if (mWebRtcAudioTrackCallback != null) {

       mWebRtcAudioTrackCallback.onWebRtcAudioTrackInit(2, sampleRate, channels,

                                   16, 100, minBufferSizeInBytes);

  }

   // tanghongfeng add end

   return true;

}

  c) 在startPlayout方法中添加如下代码:

  private boolean startPlayout() {

  ......

   try {

       audioTrack.play();

       // tanghongfeng add begin

       if (mWebRtcAudioTrackCallback != null) {

           mWebRtcAudioTrackCallback.onWebRtcAudioTrackStart();

<p>

" />

      }

       // tanghongfeng add end

  }

  ......

}</p>

  d) 在stopPlayout方法中添加如下代码:

  private boolean stopPlayout() {

  ......

   // tanghongfeng add begin

   if (mWebRtcAudioTrackCallback != null) {

         mWebRtcAudioTrackCallback.onWebRtcAudioTrackStop();

  }

   // tanghongfeng add end

   return true;

}

  e) 在内部类AudioTrackThread的run方法中添加如下代码:

  @Override

public void run() {

  ......

   while (keepAlive) {

      ......

       // tanghongfeng add begin

       else if (mWebRtcAudioTrackCallback != null) {

           mWebRtcAudioTrackCallback

                .onWebRtcAudioTracking(byteBuffer, bytesWritten, speakerMute);

      }

       // tanghongfeng add end

       byteBuffer.rewind();

  }

  ......

}

  3.编译webrtc,将audio_device_java.jar包复制到video call项目的libs中

  编译后的audio_device_java.jar包位于:

  src/out/Debug/lib.java/modules/audio_device/audio_device_java.jar

  2.使用修改后的SDK实现视频通话录音功能

  本demo基于WebRtc的android sample APP。本示例APP源码路径:src/examples/androidapp 本demo完整代码在github:

  视频通话录音的主要实现类是MediaRecordController

  一、实现方法:

  a) 使用MediaProjection+VirtualDisplay采集视频数据 b) 使用平均算法进行双向音频混合 c) 使用MediaCodec编码,使用MediaMuxer封装成MP4文件

  2、录制过程:

  录音过程.jpg

  3.搭建WebRtc服务器,完成端到端的WebRtc功能

  一、服务器搭建

  参考上一篇:搭建WebRtc服务器

  2.修改App房间服务器地址(请读者使用自己搭建的服务器地址进行设置,例子中的地址为作者本地搭建的服务器地址,无法访问来自外部网络):

  两种方式: a) 修改App源码中房间服务器的默认地址为自己搭建的房间服务器地址,修改文件pine_rtc\src\main\res\values\strings.xml:

  http://10.10.29.56:7000

  修改文件pine_rtc\src\main\AndroidManifest.xml:

  

   

       

       

       

       

       

   

  重新编译Demo App b) 在不修改源码的情况下,直接将设置中的房间服务器地址修改为启动App后自己搭建的房间服务器地址。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线