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

网站运营 策划 推广 维护网上房地产备案查询

网站运营 策划 推广 维护,网上房地产备案查询,为什么做的网站在浏览器搜不到,网站文字特效有开发者提到#xff0c;在RTMP推送端的基础上#xff0c;希望能回调编码后的音视频数据#xff0c;便于开发者对接第三方系统#xff0c;如GB28181. 为此#xff0c;我们加了一下接口#xff1a; 1. 设置音视频callback 对应接口#xff1a; /*** Set Audio Encoded…有开发者提到在RTMP推送端的基础上希望能回调编码后的音视频数据便于开发者对接第三方系统如GB28181. 为此我们加了一下接口 1. 设置音视频callback 对应接口 /*** Set Audio Encoded Data Callback.** param audio_encoded_data_callback: Audio Encoded Data Callback.** return {0} if successful*/public native int SmartPublisherSetAudioEncodedDataCallback(long handle, Object audio_encoded_data_callback);/*** Set Video Encoded Data Callback.** param video_encoded_data_callback: Video Encoded Data Callback.** return {0} if successful*/public native int SmartPublisherSetVideoEncodedDataCallback(long handle, Object video_encoded_data_callback); 设置回调 libPublisher.SmartPublisherSetAudioEncodedDataCallback(publisherHandle, new PublisherAudioEncodedDataCallback());libPublisher.SmartPublisherSetVideoEncodedDataCallback(publisherHandle, new PublisherVideoEncodedDataCallback());2. 实现 PublisherAudioEncodedDataCallback 和 PublisherVideoEncodedDataCallback class PublisherAudioEncodedDataCallback implements NTAudioDataCallback{private int audio_buffer_size 0;private int param_info_size 0;private ByteBuffer audio_buffer_ null;private ByteBuffer parameter_info_ null;Overridepublic ByteBuffer getAudioByteBuffer(int size){//Log.i(getAudioByteBuffer, size: size);if( size 1 ){return null;}if ( size audio_buffer_size audio_buffer_ ! null ){return audio_buffer_;}audio_buffer_size size 512;audio_buffer_size (audio_buffer_size0xf) (~0xf);audio_buffer_ ByteBuffer.allocateDirect(audio_buffer_size);// Log.i(getAudioByteBuffer, size: size buffer_size: audio_buffer_size);return audio_buffer_;}Overridepublic ByteBuffer getAudioParameterInfo(int size){//Log.i(getAudioParameterInfo, size: size);if(size 1){return null;}if ( size param_info_size parameter_info_ ! null ){return parameter_info_;}param_info_size size 32;param_info_size (param_info_size0xf) (~0xf);parameter_info_ ByteBuffer.allocateDirect(param_info_size);//Log.i(getAudioParameterInfo, size: size buffer_size: param_info_size);return parameter_info_;}public void onAudioDataCallback(int ret, int audio_codec_id, int sample_size, int is_key_frame, long timestamp, int sample_rate, int channel, int parameter_info_size, long reserve){Log.i(onAudioDataCallback, ret: ret , audio_codec_id: audio_codec_id , sample_size: sample_size , timestamp: timestamp ,sample_rate: sample_rate ,chn: channel , parameter_info_size: parameter_info_size);if ( audio_buffer_ null)return;audio_buffer_.rewind();if ( ret 0 publisherHandle2 ! 0 ) {libPublisher.SmartPublisherPostAudioEncodedData(publisherHandle2, audio_codec_id, audio_buffer_, sample_size, is_key_frame, timestamp, parameter_info_, parameter_info_size);}}}class PublisherVideoEncodedDataCallback implements NTVideoDataCallback{private int video_buffer_size 0;private ByteBuffer video_buffer_ null;Overridepublic ByteBuffer getVideoByteBuffer(int size){//Log.i(getVideoByteBuffer, size: size);if( size 1 ){return null;}if ( size video_buffer_size video_buffer_ ! null ){return video_buffer_;}video_buffer_size size 1024;video_buffer_size (video_buffer_size0xf) (~0xf);video_buffer_ ByteBuffer.allocateDirect(video_buffer_size);// Log.i(getVideoByteBuffer, size: size buffer_size: video_buffer_size);return video_buffer_;}public void onVideoDataCallback(int ret, int video_codec_id, int sample_size, int is_key_frame, long timestamp, int width, int height, long presentation_timestamp){Log.i(onVideoDataCallback, ret: ret , video_codec_id: video_codec_id , sample_size: sample_size , is_key_frame: is_key_frame , timestamp: timestamp ,width: width , height: height ,presentation_timestamp: presentation_timestamp);if ( video_buffer_ null)return;video_buffer_.rewind();if ( ret 0 publisherHandle2 !0 ) {libPublisher.SmartPublisherPostVideoEncodedData(publisherHandle2, video_codec_id, video_buffer_, sample_size, is_key_frame, timestamp, presentation_timestamp);}}} 3. 提供开始回调数据和停止回调数据接口 /*** Start output Encoded Data(用于编码后的音视频数据回调)** return {0} if successful*/public native int SmartPublisherStartOutputEncodedData(long handle);/*** Stop output Encoded Data** return {0} if successful*/public native int SmartPublisherStopOutputEncodedData(long handle); 4. 上层demo调用实例 class ButtonEncodedDataCallbackListener implements OnClickListener {public void onClick(View v) {if (isEncodedDatacallbackRunning) {stopEncodedDataCallback();if (!isPushing !isRTSPPublisherRunning !isRecording) {ConfigControlEnable(true);}btnEncodedDataCallback.setText(启动编码数据回调);isEncodedDatacallbackRunning false;if (publisherHandle2 ! 0) {libPublisher.SmartPublisherStopPublisher(publisherHandle2);libPublisher.SmartPublisherClose(publisherHandle2);publisherHandle2 0;}return;}Log.i(TAG, onClick start encoded data callback..);if (libPublisher null)return;if (!isPushing !isRTSPPublisherRunning !isRecording) {InitAndSetConfig();}libPublisher.SmartPublisherSetAudioEncodedDataCallback(publisherHandle, new PublisherAudioEncodedDataCallback());libPublisher.SmartPublisherSetVideoEncodedDataCallback(publisherHandle, new PublisherVideoEncodedDataCallback());int startRet libPublisher.SmartPublisherStartOutputEncodedData(publisherHandle);if (startRet ! 0) {isEncodedDatacallbackRunning false;Log.e(TAG, Failed to start encoded data callback.);return;}if (!isPushing !isRTSPPublisherRunning !isRecording) {if (pushType 0 || pushType 1) {CheckInitAudioRecorder(); //enable pure video publisher..}ConfigControlEnable(false);}btnEncodedDataCallback.setText(停止编码数据回调);isEncodedDatacallbackRunning true;int audio_opt 2;int video_opt 2;publisherHandle2 libPublisher.SmartPublisherOpen(myContext, audio_opt, video_opt,videoWidth, videoHeight);if (publisherHandle2 0) {Log.e(TAG, sdk open failed!);return;}String relayUrl rtmp://player.daniulive.com:1935/hls/stream8888;libPublisher.SmartPublisherSetURL(publisherHandle2, relayUrl);libPublisher.SmartPublisherStartPublisher(publisherHandle2);}}; //停止编码后数据回调private void stopEncodedDataCallback() {if(!isEncodedDatacallbackRunning){return;}if (!isPushing !isRTSPPublisherRunning !isRecording) {if (audioRecord_ ! null) {Log.i(TAG, stopRecorder, call audioRecord_.StopRecording..);audioRecord_.Stop();if (audioRecordCallback_ ! null) {audioRecord_.RemoveCallback(audioRecordCallback_);audioRecordCallback_ null;}audioRecord_ null;}}if (libPublisher ! null) {libPublisher.SmartPublisherStopOutputEncodedData(publisherHandle);}if (!isPushing !isRTSPPublisherRunning !isRecording) {if (publisherHandle ! 0) {if (libPublisher ! null) {libPublisher.SmartPublisherClose(publisherHandle);publisherHandle 0;}}}} 此demo为了便于演示方便另启动了个新的推送实例音视频编码后的数据通过新的实例调用编码后的音视频数据接口继续推RTMP出去。 此Demo的优越性在于回调编码后的音视频数据功能可与推RTMP、录像、内置RTSP服务SDK组合使用亦可单独使用。
http://www.yutouwan.com/news/353563/

相关文章:

  • 微信编辑器做网站vs做网站的书籍
  • 网站维护中 源码网站备案幕布尺寸
  • 大浪网站建设 优帮云wordpress 授权插件
  • ui做自适应网站在线拍卖网站源码
  • 南昌网站建设信息wordpress ftp配置
  • 建设增塑剂网站宁波seo公司推荐
  • 网站如何制作四川住房城乡建设厅官方网站
  • 衡水做wap网站多少钱菜单设计制作图片
  • 建设银行深圳天健世纪支行网站wordpress权限说明
  • 电商网站平台建设资金预算wordpress 安装出错
  • 网站建设费 无形资产麻章手机网站建设公司
  • 做传媒网站公司名称Wordpress 百度云存储
  • 网站制作公司的swot分析搭建免费个人网站2022
  • 网站设置默认首页seo免费入门教程
  • 织梦网站管理后台系统上面的织梦链接怎么样去掉比较好的网页制作公司
  • 网站维护开发合同srm采购管理系统
  • 银川网站建设那家公司比较好怎么注销个人的营业执照
  • 安徽网站建设公司排名美工图片制作软件
  • 厉害的网站开发东莞微信小程序开发公司报价
  • 网站做su什么意思大佛寺广州网站
  • 做cpa的电影网站模板免费刷推广链接的软件
  • 做网站服务器多少钱搜索引擎优化的英文
  • 深圳大腕互联网站建设彩虹云免费主机
  • 中国万网官方网站做网站的收钱不管了
  • 东乡做网站做视频网站资金多少
  • 艺阳科技网站建设网站开发设计的技术路线
  • 建企业网站多少钱南昌购物网站制作
  • 郑州做网站公司有多少钱品牌注册需要什么条件
  • 网站制作软件图标网站开发完整的解决方案
  • 网站版权符号代码网站和软件的区别