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

有没有做课题很好的网站辽宁建设工程信息网app

有没有做课题很好的网站,辽宁建设工程信息网app,南京网站关键词,搜索引擎营销的作用技术背景 实际上#xff0c;我们在2015年做Android平台RTSP、RTMP播放模块的时候#xff0c;第一版就支持了多实例播放#xff0c;因为SDK设计比较灵活#xff0c;做个简单的player实例封装即可实现多实例播放#xff08;Android Unity的就有多路demo#xff09;#x…技术背景 实际上我们在2015年做Android平台RTSP、RTMP播放模块的时候第一版就支持了多实例播放因为SDK设计比较灵活做个简单的player实例封装即可实现多实例播放Android Unity的就有多路demo所以官方一直没有正式demo本次也是有个开发者提到希望测试下我们多路播放的效果自己又不想做封装索性给做个版本。 技术实现 废话不多说先上图 我们针对的功能展示主要是播放和录像这块先说播放 /** SmartPlayer.java* Author: https://daniusdk.com* Created by DaniuLive on 2015/09/26.*/ class ButtonPlayback1Listener implements View.OnClickListener {public void onClick(View v) {if (stream_player_1_.is_playing()) {Log.i(TAG, Stop player1..);boolean iRet stream_player_1_.StopPlayer();if (!iRet) {Log.e(TAG, Call StopPlayer failed..);return;}stream_player_1_.try_release();btn_playback1.setText(开始播放1);SetViewVisibility(surface_view_1_);} else {Log.i(TAG, Start playback stream1);int play_buffer 0;int is_using_tcp 0;if(!stream_player_1_.OpenPlayerHandle(playback_url_1_, play_buffer, is_using_tcp))return;stream_player_1_.SetView(surface_view_1_);boolean is_mute false;boolean iPlaybackRet stream_player_1_.StartPlayer(isHardwareDecoder, is_enable_hardware_render_mode, is_mute);if (!iPlaybackRet) {Log.e(TAG, Call StartPlayer failed..);return;}btn_playback1.setText(停止播放1);}} } 对应的OpenPlayerHandle()实现如下 /** LibPlayerWrapper.java.java* Author: https://daniusdk.com*/ public boolean OpenPlayerHandle(String playback_url, int play_buffer, int is_using_tcp) {if (check_native_handle())return true;if(!isValidRtspOrRtmpUrl(playback_url))return false;long handle lib_player_.SmartPlayerOpen(application_context());if (0handle) {Log.e(TAG, sdk open failed!);return false;}lib_player_.SetSmartPlayerEventCallbackV2(handle, new EventHandleV2());lib_player_.SmartPlayerSetBuffer(handle, play_buffer);// set report download speed(默认2秒一次回调 用户可自行调整report间隔)lib_player_.SmartPlayerSetReportDownloadSpeed(handle, 1, 4);boolean isFastStartup true;lib_player_.SmartPlayerSetFastStartup(handle, isFastStartup ? 1 : 0);//设置RTSP超时时间int rtsp_timeout 10;lib_player_.SmartPlayerSetRTSPTimeout(handle, rtsp_timeout);//设置RTSP TCP/UDP模式自动切换int is_auto_switch_tcp_udp 1;lib_player_.SmartPlayerSetRTSPAutoSwitchTcpUdp(handle, is_auto_switch_tcp_udp);lib_player_.SmartPlayerSaveImageFlag(handle, 1);// It only used when playback RTSP stream..lib_player_.SmartPlayerSetRTSPTcpMode(handle, is_using_tcp);lib_player_.DisableEnhancedRTMP(handle, 0);lib_player_.SmartPlayerSetUrl(handle, playback_url);set(handle);return true; } 对应的开始播放、停止播放设计 /** LibPlayerWrapper.java* Author: https://daniusdk.com*/ public boolean StartPlayer(boolean is_hardware_decoder, boolean is_enable_hardware_render_mode, boolean is_mute) {if (is_playing()) {Log.e(TAG, already playing, native_handle: get());return false;}SetPlayerParam(is_hardware_decoder, is_enable_hardware_render_mode, is_mute);int ret lib_player_.SmartPlayerStartPlay(get());if (ret ! OK) {Log.e(TAG, call StartPlay failed, native_handle: get() , ret: ret);return false;}write_lock_.lock();try {this.is_playing_ true;} finally {write_lock_.unlock();}Log.i(TAG, call StartPlayer OK, native_handle: get());return true; }public boolean StopPlayer() {if (!check_native_handle())return false;if (!is_playing()) {Log.w(TAG, its not playing, native_handle: get());return false;}boolean is_need_call false;write_lock_.lock();try {if (this.is_playing_) {this.is_playing_ false;is_need_call true;}} finally {write_lock_.unlock();}if (is_need_call)lib_player_.SmartPlayerStopPlay(get());return true; } 录像设计 /** SmartPlayer.java* Author: https://daniusdk.com*/ class ButtonRecorder1Listener implements View.OnClickListener {public void onClick(View v) {if (stream_player_1_.is_recording()) {Log.i(TAG, Stop recorder1..);boolean iRet stream_player_1_.StopRecorder();if (!iRet) {Log.e(TAG, Call StopRecorder failed..);return;}stream_player_1_.try_release();btn_recorder1.setText(开始录像1);} else {Log.i(TAG, Start recorder stream1);int play_buffer 0;int is_using_tcp 0;if(!stream_player_1_.OpenPlayerHandle(playback_url_1_, play_buffer, is_using_tcp))return;stream_player_1_.ConfigRecorderParam(recDir, 400, 1, 1, 1);boolean iRecRet stream_player_1_.StartRecorder();if (!iRecRet) {Log.e(TAG, Call StartRecorder failed..);return;}btn_recorder1.setText(停止录像1);}} } 录像参数配置选项 /** LibPlayerWrapper.java* Author: https://daniusdk.com*/ public boolean ConfigRecorderParam(String rec_dir, int file_max_size, int is_transcode_aac,int is_record_video, int is_record_audio) {if(!check_native_handle())return false;if (null rec_dir || rec_dir.isEmpty())return false;int ret lib_player_.SmartPlayerCreateFileDirectory(rec_dir);if (ret ! 0) {Log.e(TAG, Create record dir failed, path: rec_dir);return false;}if (lib_player_.SmartPlayerSetRecorderDirectory(get(), rec_dir) ! 0) {Log.e(TAG, Set record dir failed , path: rec_dir);return false;}if (lib_player_.SmartPlayerSetRecorderFileMaxSize(get(),file_max_size) ! 0) {Log.e(TAG, SmartPlayerSetRecorderFileMaxSize failed.);return false;}lib_player_.SmartPlayerSetRecorderAudioTranscodeAAC(get(), is_transcode_aac);// 更细粒度控制录像的, 一般情况无需调用lib_player_.SmartPlayerSetRecorderVideo(get(), is_record_video);lib_player_.SmartPlayerSetRecorderAudio(get(), is_record_audio);return true; } 开始录像、结束录像 /** LibPlayerWrapper.java* Author: https://daniusdk.com*/ public boolean StartRecorder() {if (is_recording()) {Log.e(TAG, already recording, native_handle: get());return false;}int ret lib_player_.SmartPlayerStartRecorder(get());if (ret ! OK) {Log.e(TAG, call SmartPlayerStartRecorder failed, native_handle: get() , ret: ret);return false;}write_lock_.lock();try {this.is_recording_ true;} finally {write_lock_.unlock();}Log.i(TAG, call SmartPlayerStartRecorder OK, native_handle: get());return true; }public boolean StopRecorder() {if (!check_native_handle())return false;if (!is_recording()) {Log.w(TAG, its not recording, native_handle: get());return false;}boolean is_need_call false;write_lock_.lock();try {if (this.is_recording_) {this.is_recording_ false;is_need_call true;}} finally {write_lock_.unlock();}if (is_need_call)lib_player_.SmartPlayerStopRecorder(get());return true; } 总结 说了这么多以RTSP播放为例大概说下实现的功能 [支持播放协议]高稳定、超低延迟、业内首屈一指的RTSP直播播放器SDK [多实例播放]支持多实例播放 [事件回调]支持网络状态、buffer状态等回调 [视频格式]支持H.265、H.264此外还支持RTSP MJPEG播放 [音频格式]支持AAC/PCMA/PCMU [H.264/H.265软解码]支持H.264/H.265软解 [H.264硬解码]Windows/Android/iOS支持特定机型H.264硬解 [H.265硬解]Windows/Android/iOS支持特定机型H.265硬解 [H.264/H.265硬解码]Android支持设置Surface模式硬解和普通模式硬解码 [RTSP模式设置]支持RTSP TCP/UDP模式设置 [RTSP TCP/UDP自动切换]支持RTSP TCP、UDP模式自动切换 [RTSP超时设置]支持RTSP超时时间设置单位秒 [RTSP 401认证处理]支持上报RTSP 401事件如URL携带鉴权信息会自动处理 [缓冲时间设置]支持buffer time设置 [首屏秒开]支持首屏秒开模式 [复杂网络处理]支持断网重连等各种网络环境自动适配 [快速切换URL]支持播放过程中快速切换其他URL内容切换更快 [音视频多种render机制]Android平台视频surfaceview/OpenGL ES音频AudioTrack/OpenSL ES [实时静音]支持播放过程中实时静音/取消静音 [实时音量调节]支持播放过程中实时调节音量 [实时快照]支持播放过程中截取当前播放画面 [只播关键帧]Windows平台支持实时设置是否只播放关键帧 [渲染角度]支持0°90°180°和270°四个视频画面渲染角度设置 [渲染镜像]支持水平反转、垂直反转模式设置 [等比例缩放]支持图像等比例缩放绘制(Android设置surface模式硬解模式不支持) [实时下载速度更新]支持当前下载速度实时回调(支持设置回调时间间隔) [解码前视频数据回调]支持H.264/H.265数据回调 [解码后视频数据回调]支持解码后YUV/RGB数据回调 [解码前音频数据回调]支持AAC/PCMA/PCMU数据回调 [音视频自适应]支持播放过程中音视频信息改变后自适应 [扩展录像功能]完美支持和录像SDK组合使用。 上面只是简单的播放、录像的演示除此之外大牛直播SDK的RTSP、RTMP播放器海康实现播放缓冲设置、软硬解码设置、实时快照、实时音量调节、实时解码后数据回调等。毫秒级延迟完全满足对延迟、稳定性要求苛刻的场景下。感兴趣的开发者可以单独和我沟通。
http://www.dnsts.com.cn/news/128943.html

相关文章:

  • 网站服务器关闭怎么恢复ftp网站上传 方法
  • wap网站cms建站之星破解版
  • 一家公司为什么要建官方网站看男科是去正规医院还是男科医院
  • led网站建设方案模板郑州七彩网站建设公司
  • 网站开发的现实意义如何用word做网站地图
  • 公众号如何做网站各地信息推广平台
  • 嘉兴网站建设低价推荐深圳福田教育
  • 目前做哪些网站能致富wordpress无法找到页面
  • 做网站实现登陆功能今天福州发生一起重大
  • 建设大型网站怎样赢利需要做网站的企业
  • 网站提交工具北京网站建设招标
  • 泉州易尔通网站建设房屋设计图 农村
  • 重庆市住房和城乡建设厅网站查询建筑资质的网站
  • 做网站所需要的代码6甲级设计院加盟分公司
  • 铁岭做网站公司信息代理公司资质
  • 栾城网站建设建设公司是什么意思
  • 网站特效代码上那找好企业电商网站备案流程
  • 安徽省两学一做网站专栏专业制作网站制作
  • 简洁网站首页html代码登封市建设局网站
  • 上海平台网站建设哪家有优秀网站首页设计步骤
  • 烟台住房和城乡建设厅网站网站如何建设目录结构
  • iis网站建设o2o网站建设公司排名
  • 郑州网站建设品牌好网站开发实训心得体会
  • 贵阳网站开发外包公司广州市城市建设档案馆网站
  • 义乌义亭招工做网站养猪工作网页升级访问每天
  • 网站建设的心得室内设计动态效果图制作
  • 网站做的一般怎么评价个人建网站运营.
  • 如何加强精神文明网站建设内容除了做视频网站还能做什么网站
  • 什么网站可以免费做视频的软件有哪些所有北京网站建设公司
  • php网站如何做多语言美容养生连锁东莞网站建设