当前位置: 首页 > news >正文

wordpress log文件做seo推广手机网站

wordpress log文件,做seo推广手机网站,南阳注册公司多少钱,网站开发手机端最近在开发使用WebRtc进行视频通话和语音通话#xff0c;我使用的设备是MTK的手机#xff0c;期间后台的技术人员几乎没法提供任何帮助#xff0c;只有接口和测试的web端#xff0c;有遇到不能推流。推流成功网页端有画面有声音#xff0c;但是安卓端有画面#xff0c;没…最近在开发使用WebRtc进行视频通话和语音通话我使用的设备是MTK的手机期间后台的技术人员几乎没法提供任何帮助只有接口和测试的web端有遇到不能推流。推流成功网页端有画面有声音但是安卓端有画面没有声音的情况 问题一无法推流 一开始遇到问题是在进行推流前进行sdp的交换一直返回返回code:400的情况我们知道在 onCreateSuccess 方法回调中拿到offerSdp用于向SRS服务进行网络请求这时候一定注意其间的网络请求地址token的拼接peerConnection.addTransceiver添加的视频轨道和音频轨道一定要按照实际需求来没有的就不要全部添加全部中间步骤没错这时候还是返回code400的问题后来在后台看到的错误日志是create session : create session : add publisher : publish negotiate : no found valid H.264 payload type然后就是网上搜索下同样的问题这里感谢 冬季穿短裤同学的知识帮助就是接口请求里offer sdp中mvideo无H.264相关信息即WebRTC在createOffer时返回的sdp没有H.264相关信息Android的使用WebRTC仅支持硬件上 H.264 解码和编码并且仅支持部分芯片组。因此如果设备不支持硬件 H.264 或具有不受支持的芯片组您将只能使用 VP8、VP9。支持的芯片组仅有OMX.qcom.*和OMX.Exynos.*不支持的要自行添加。 解决方法 VideoEncoderFactory创建 在创建PeerConnectionFactory可以设VideoEncoderFactory val encoderFactory DefaultVideoEncoderFactory(eglBaseContext, true, true) val peerConnectionFactory PeerConnectionFactory.builder().setVideoEncoderFactory(encoderFactory).createPeerConnectionFactory()public class DefaultVideoEncoderFactory implements VideoEncoderFactory {/*** 硬解件编码工厂*/private final VideoEncoderFactory hardwareVideoEncoderFactory;/*** 软件编码工厂*/private final VideoEncoderFactory softwareVideoEncoderFactory new SoftwareVideoEncoderFactory();public DefaultVideoEncoderFactory(Context eglContext, boolean enableIntelVp8Encoder, boolean enableH264HighProfile) {//创建硬解编码工厂this.hardwareVideoEncoderFactory new HardwareVideoEncoderFactory(eglContext, enableIntelVp8Encoder, enableH264HighProfile);}/*** 注意这个构造方法仅包可见*/DefaultVideoEncoderFactory(VideoEncoderFactory hardwareVideoEncoderFactory) {this.hardwareVideoEncoderFactory hardwareVideoEncoderFactory;}... }/*** 用于创建视频编码器工厂*/ public interface VideoEncoderFactory {/** * 为给定的视频编解码器创建一个编码器。*/NullableCalledByNativeVideoEncoder createEncoder(VideoCodecInfo var1);/*** 枚举支持的视频编解码器列表。这个方法只会被调用一次结果将被缓存。*/CalledByNativeVideoCodecInfo[] getSupportedCodecs();CalledByNativedefault VideoCodecInfo[] getImplementations() {return this.getSupportedCodecs();}CalledByNativedefault VideoEncoderFactory.VideoEncoderSelector getEncoderSelector() {return null;} }关键在于getSupportedCodecs() 在 HardwareVideoEncoderFactory中是如何实现的 Override public VideoCodecInfo[] getSupportedCodecs() {// Android19以下不支持硬解编码.if (Build.VERSION.SDK_INT Build.VERSION_CODES.KITKAT) {return new VideoCodecInfo[0];}ListVideoCodecInfo supportedCodecInfos new ArrayList();// 按优先顺序生成支持的编解码器列表// VP8, VP9, H264 (high profile), and H264 (baseline profile).for (VideoCodecType type : new VideoCodecType[]{VideoCodecType.VP8, VideoCodecType.VP9, VideoCodecType.H264}) {//查找编解码器类型这里是关键MediaCodecInfo codec findCodecForType(type);if (codec ! null) {String name type.name();// supported by the decoder.if (type VideoCodecType.H264 isH264HighProfileSupported(codec)) {supportedCodecInfos.add(new VideoCodecInfo(name, MediaCodecUtils.getCodecProperties(type, /* highProfile */ true)));}supportedCodecInfos.add(new VideoCodecInfo(name, MediaCodecUtils.getCodecProperties(type, /* highProfile */ false)));}}return supportedCodecInfos.toArray(new VideoCodecInfo[0]); }findCodecForType(VideoCodecType)根据类型查找支持的编解码器 private MediaCodecInfo findCodecForType(VideoCodecType type) {for (int i 0; i MediaCodecList.getCodecCount(); i) {MediaCodecInfo info null;try {info MediaCodecList.getCodecInfoAt(i);} catch (IllegalArgumentException e) {//无法检索编码器编解码器信息Logging.e(TAG, Cannot retrieve encoder codec info, e);}//编解器信息为null或者不是编解码器不是编码器if (info null || !info.isEncoder()) {continue;}//判断编解码器是否支持这里就会去判断不同的芯片组是否支持if (isSupportedCodec(info, type)) {return info;}}return null; // 不支持的类型 }isSupportedCodec(MediaCodecInfo, VideoCodecType)判断MediaCodecInfo和VideoCodecType结合设备芯片组信息是否支持 private boolean isSupportedCodec(MediaCodecInfo info, VideoCodecType type) {if (!MediaCodecUtils.codecSupportsType(info, type)) {return false;}// Check for a supported color format.if (MediaCodecUtils.selectColorFormat(MediaCodecUtils.ENCODER_COLOR_FORMATS, /*这一步其实就可以判断编解码器是否支持了给定的类型了如果不抛异常的话*/info.getCapabilitiesForType(type.mimeType())) null) {return false;}return isHardwareSupportedInCurrentSdk(info, type) isMediaCodecAllowed(info); }/*** 结合当前的sdk再次判断是否支持*/ private boolean isHardwareSupportedInCurrentSdk(MediaCodecInfo info, VideoCodecType type) {switch (type) {case VP8:return isHardwareSupportedInCurrentSdkVp8(info);case VP9:return isHardwareSupportedInCurrentSdkVp9(info);case H264:return isHardwareSupportedInCurrentSdkH264(info);}return false; }private boolean isHardwareSupportedInCurrentSdkH264(MediaCodecInfo info) {//H264 硬件在此类型设备上可能表现不佳。SAMSUNG-SGH-I337, Nexus 7, Nexus 4if (H264_HW_EXCEPTION_MODELS.contains(Build.MODEL)) {return false;} else {String name info.getName();//问题就在这写死的仅支持的硬件编码器解码器组件名称的前缀。//所以要在后面自行追加我们自己设备支持H264名称信息。return name.startsWith(OMX.qcom.) VERSION.SDK_INT 19 || name.startsWith(OMX.Exynos.) VERSION.SDK_INT 21;} } ————————————————版权声明本文为博主原创文章遵循 CC 4.0 BY-SA 版权协议转载请附上原文出处链接和本声明。原文链接https://blog.csdn.net/csdn_shen0221/article/details/119982257 Github传送门 问题二拉流成功出现没有声音 因为没有声音只有在mtk的设备上没有在我其他的高通处理器手机是正常的我们一开始想到的可能就是收到的流和编解码问题还是比较相信webRtc的sdk没有问题的事实证明打脸了 解决思路 1、拦截拉流时的音频流通过反射回调拿到PCM数据对pcm进行播放 audioDeviceModule JavaAudioDeviceModule.builder(applicationContext).setSamplesReadyCallback {//音频输入数据麦克风数据原始pcm数据可以直接录制成pcm文件再转成mp3val audioFormat it.audioFormatval channelCount it.channelCountval sampleRate it.sampleRate//pcm格式数据val data it.data}.setAudioTrackStateCallback(object : JavaAudioDeviceModule.AudioTrackStateCallback {override fun onWebRtcAudioTrackStart() {audioDeviceModule.setAudioTrackSamplesReadyCallback {//音频输出数据通话时对方数据原始pcm数据可以直接录制成pcm文件再转成mp3val audioFormat it.audioFormatval channelCount it.channelCountval sampleRate it.sampleRate//pcm格式数据val data it.data} }override fun onWebRtcAudioTrackStop() {}}).createAudioDeviceModule() 回调数据拿到了pcm的信息audioFormat2  channelCount1  sampleRate48000 a.直接使用AudioTrack播放 data在高通手机可以但是在mtk平台不行 b.生成.pcm文件两设备都可以播放 2、替换播放器使用编译openSL ES播放文件流,可以播放但是集成到项目里就不行了这时候可以想到应该时webrtc内部做了处理在拉流播放的时候会关闭其他所有的声道播放 3、使用蓝牙进行播放, mtk设备使用蓝牙进行语音通话有声音这时候立马想到数据流声道的问题 解决方法查资料发现webrtc播放音频流是在WebRtcAudioTrack中实现的点击进去看到也是使用AudioTrack进行播放的使用了AudioManager.STREAM_VOICE_CALL声道,我们类搜索将所有的Call声道换成AudioManager.STREAM_MUSIC声道以及AudioAttributes.USAGE_VOICE_COMMUNICATION改成AudioAttributes.USAGE_MEDIA 打开通话测试冒得问题了 一定不要遗漏了AudioAttributes.USAGE_VOICE_COMMUNICATION
http://www.w-s-a.com/news/19794/

相关文章:

  • 企业网站规划方案网站是做排行榜
  • 万维网网站个人申请网站
  • 我想做网站怎么做昆山网站建设 全是乱码
  • 单位做网站怎么做圣诞树html网页代码
  • 网页开发与网站开发企业网站托管服务常用指南
  • 一站式服务图片临沂做进销存网站
  • 鸣蝉智能建站标准物质网站建设模板
  • 电商网站建设技术员的工作职责商业网站制作价格
  • 网站html模板免费下载公司的网站建设费用入什么科目
  • 高中生做网站网页网页制作教程零基础学会
  • 做金融网站有哪些要求WordPress站内搜索代码
  • 济南网站怎么做seowordpress注册发邮件
  • 珠海网站设计平台东莞市手机网站建设平台
  • 网站开发文档合同怎么在wordpress导航条下方加入文字广告链接
  • 网站建设需怎么做有网站怎么做企业邮箱
  • 网站制作流程视频教程小程序多少钱一年
  • 暗网是什么网站花都网站建设哪家好
  • 贵州网站开发流程晋江论坛手机版
  • 网站建设丿金手指谷哥14阿里巴巴官网电脑版
  • 网站开发招聘信息匿名ip访问网站受限
  • 网站转app工具网站规划建设与管理维护大作业
  • flash是怎么做网站的.net购物网站开发
  • 烟台网站建设求职简历品质商城网站建设
  • 做百度外链哪些网站权重高点做网站具备的条件
  • 怎么样用ppt做网站红番茄 网站点评
  • 建设银行河北分行招聘网站哪里能找到网站
  • 兰州营销型网站网站建设收费标准
  • 网站首页动图怎么做自己做网站很难
  • 自建网站如何盈利推广引流最快的方法
  • 网页设计网站结构图怎么弄网站用户 分析