日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android平台RTSP轻量级服务|RTMP推送摄像头或屏幕之音频接口设计

發布時間:2025/3/12 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android平台RTSP轻量级服务|RTMP推送摄像头或屏幕之音频接口设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

好多開發者在做Android平臺錄像或者RTSP輕量級服務、RTMP推送相關模塊時,對需要設計哪些常用接口會心存疑惑,本文主要以大牛直播SDK(官方)為例,簡單介紹下Android平臺直播推送SDK所有音頻相關的接口,感興趣的開發者可以看看。

1. 設置audio編碼類型,默認AAC,如需更低的碼率,可設置SPEEX編碼,一把考慮到錄像等操作的通用性,建議選擇AAC編碼。

/*** Set audio encoder type(設置音頻編碼類型)* * @param type: if with 1:AAC, if with 2: SPEEX* * @return {0} if successful*/public native int SmartPublisherSetAudioCodecType(long handle, int type);

2. 設置AAC音頻編碼碼率,不再贅述。

/*** Set audio encoder bit-rate(設置音頻編碼碼率), 當前只對AAC編碼有效** @param kbit_rate: 碼率(單位是kbps), 如果是0的話將使用默認碼率, 必須大于等于0** @return {0} if successful*/public native int SmartPublisherSetAudioBitRate(long handle, int kbit_rate);

3. 設置SPEEX音頻編碼質量,一般設置到8即可。

/*** Set speex encoder quality(設置speex編碼質量)* * @param quality: range with (0, 10), default value is 8* * @return {0} if successful*/public native int SmartPublisherSetSpeexEncoderQuality(long handle, int quality);

4. 設置噪音抑制,噪音抑制可用于對采集到的audio數據如雜音背景音的消除

/*** Set Audio Noise Suppression(設置音頻噪音抑制)* * @param isNS: if with 1:suppress, if with 0: does not suppress* * @return {0} if successful*/public native int SmartPublisherSetNoiseSuppression(long handle, int isNS);

5. 設置音頻自動增益控制,AGC的目的是,系統可根據聲音大小自動適當調整音量,使聲音大小盡量保持一致

/*** Set Audio AGC(設置音頻自動增益控制)* * @param isAGC: if with 1:AGC, if with 0: does not AGC* * @return {0} if successful*/public native int SmartPublisherSetAGC(long handle, int isAGC);

6. 設置回音消除,用于一對一互動場景下,消除音頻回音

/*** Set Audio Echo Cancellation(設置音頻回音消除)** @param isCancel: if with 1:Echo Cancellation, if with 0: does not cancel** @param delay: echo delay(ms), if with 0, SDK will automatically estimate the delay.** @return {0} if successful*/public native int SmartPublisherSetEchoCancellation(long handle, int isCancel, int delay);

7. 設置混音,可用于比如兩路音頻混音場景,具體可參考一對一互動的demo

/*** 設置混音,目前支持兩路音頻混音** @param is_mix: 1混音, 0不混音, 默認不混音** @return {0} if successful*/public native int SmartPublisherSetAudioMix(long handle, int is_mix);

8. 實時靜音,實時靜音顧名思義,推送過程中,暫停音頻推送

/*** Set mute or not during publish stream(設置實時靜音)* * @param isMute: if with 1:mute, if with 0: does not mute* * @return {0} if successful*/public native int SmartPublisherSetMute(long handle, int isMute);

9. 用于設置輸入音量,范圍是[0.0, 5.0],除非麥克風采集到的audio過小,一般不建議放大,放大的話,會引入噪音等

/*** 設置輸入音量, 這個接口一般不建議調用, 在一些特殊情況下可能會用, 一般不建議放大音量** @param index: 一般是0和1, 如果沒有混音的只用0, 有混音的話, 0,1分別設置音量** @param volume: 音量,默認是1.0,范圍是[0.0, 5.0], 設置成0靜音, 1音量不變** @return {0} if successful*/public native int SmartPublisherSetInputAudioVolume(long handle, int index, float volume);

10. 對接外部實時采集的PCM數據,考慮到集成方便,我們提供了以下三個接口,注意PCM音頻數據接口每10ms傳第一次audio數據

/*** 傳遞PCM音頻數據給SDK, 每10ms音頻數據傳入一次* * @param pcmdata: pcm數據, 需要使用ByteBuffer.allocateDirect分配, ByteBuffer.isDirect()是true的才行.* @param size: pcm數據大小* @param sample_rate: 采樣率,當前只支持{44100, 8000, 16000, 24000, 32000, 48000}, 推薦44100* @param channel: 通道, 當前通道支持單通道(1)和雙通道(2),推薦單通道(1)* @param per_channel_sample_number: 這個請傳入的是 sample_rate/100*/public native int SmartPublisherOnPCMData(long handle, ByteBuffer pcmdata, int size, int sample_rate, int channel, int per_channel_sample_number);/*** 傳遞PCM音頻數據給SDK, 每10ms音頻數據傳入一次** @param pcmdata: pcm數據, 需要使用ByteBuffer.allocateDirect分配, ByteBuffer.isDirect()是true的才行.* @param offset: pcmdata的偏移* @param size: pcm數據大小* @param sample_rate: 采樣率,當前只支持{44100, 8000, 16000, 24000, 32000, 48000}, 推薦44100* @param channel: 通道, 當前通道支持單通道(1)和雙通道(2),推薦單通道(1)* @param per_channel_sample_number: 這個請傳入的是 sample_rate/100*/public native int SmartPublisherOnPCMDataV2(long handle, ByteBuffer pcmdata, int offset, int size, int sample_rate, int channel, int per_channel_sample_number);/*** 傳遞PCM音頻數據給SDK, 每10ms音頻數據傳入一次** @param pcm_short_array: pcm數據, short是native endian order* @param offset: 數組偏移* @param len: 數組項數* @param sample_rate: 采樣率,當前只支持{44100, 8000, 16000, 24000, 32000, 48000}, 推薦44100* @param channel: 通道, 當前通道支持單通道(1)和雙通道(2),推薦單通道(1)* @param per_channel_sample_number: 這個請傳入的是 sample_rate/100*/public native int SmartPublisherOnPCMShortArray(long handle, short[] pcm_short_array, int offset, int len, int sample_rate, int channel, int per_channel_sample_number);

11. 設置傳遠端數據,主要用于一對一環境下,拉流端拉到的audio,回調上來,通過推送端這個接口設置下去,完成整體的回音消除

/*** Set far end pcm data* * @param pcmdata : 16bit pcm data* @param sampleRate: audio sample rate* @param channel: auido channel* @param per_channel_sample_number: per channel sample numbers* @param is_low_latency: if with 0, it is not low_latency, if with 1, it is low_latency* @return {0} if successful*/public native int SmartPublisherOnFarEndPCMData(long handle, ByteBuffer pcmdata, int sampleRate, int channel, int per_channel_sample_number, int is_low_latency);

12. PCM混音音頻數據接口,注意,每10ms音頻數據傳入一次

/*** 傳遞PCM混音音頻數據給SDK, 每10ms音頻數據傳入一次** @param stream_index: 當前只能傳1, 傳其他返回錯誤* @param pcm_data: pcm數據, 需要使用ByteBuffer.allocateDirect分配, ByteBuffer.isDirect()是true的才行.* @param offset: pcmdata的偏移* @param size: pcm數據大小* @param sample_rate: 采樣率,當前只支持{44100, 8000, 16000, 24000, 32000, 48000}* @param channels: 通道, 當前通道支持單通道(1)和雙通道(2)* @param per_channel_sample_number: 這個請傳入的是 sample_rate/100*/public native int SmartPublisherOnMixPCMData(long handle, int stream_index, ByteBuffer pcm_data, int offset, int size, int sample_rate, int channels, int per_channel_sample_number);/*** 傳遞PCM混音音頻數據給SDK, 每10ms音頻數據傳入一次** @param stream_index: 當前只能傳1, 傳其他返回錯誤* @param pcm_short_array: pcm數據, short是native endian order* @param offset: 數組偏移* @param len: 數組項數* @param sample_rate: 采樣率,當前只支持{44100, 8000, 16000, 24000, 32000, 48000}* @param channels: 通道, 當前通道支持單通道(1)和雙通道(2)* @param per_channel_sample_number: 這個請傳入的是 sample_rate/100*/public native int SmartPublisherOnMixPCMShortArray(long handle, int stream_index, short[] pcm_short_array, int offset, int len, int sample_rate, int channels, int per_channel_sample_number);

13. 用于編碼后audio數據對接,主要是轉發模塊使用

/*** 設置音頻數據(AAC/PCMA/PCMU/SPEEX)** @param codec_id:** NT_MEDIA_CODEC_ID_AUDIO_BASE = 0x10000,* NT_MEDIA_CODEC_ID_PCMA = NT_MEDIA_CODEC_ID_AUDIO_BASE,* NT_MEDIA_CODEC_ID_PCMU,* NT_MEDIA_CODEC_ID_AAC,* NT_MEDIA_CODEC_ID_SPEEX,* NT_MEDIA_CODEC_ID_SPEEX_NB,* NT_MEDIA_CODEC_ID_SPEEX_WB,* NT_MEDIA_CODEC_ID_SPEEX_UWB,** @param data audio數據** @param size data length** @param is_key_frame 是否I幀, if with key frame, please set 1, otherwise, set 0, audio忽略** @param timestamp video timestamp** @param parameter_info 用于AAC special config信息填充** @param parameter_info_size parameter info size** @return {0} if successful*/public native int SmartPublisherPostAudioEncodedData(long handle, int codec_id, ByteBuffer data, int size, int is_key_frame, long timestamp,ByteBuffer parameter_info, int parameter_info_size);/*** 設置音頻數據(AAC/PCMA/PCMU/SPEEX)** @param codec_id:** NT_MEDIA_CODEC_ID_AUDIO_BASE = 0x10000,* NT_MEDIA_CODEC_ID_PCMA = NT_MEDIA_CODEC_ID_AUDIO_BASE,* NT_MEDIA_CODEC_ID_PCMU,* NT_MEDIA_CODEC_ID_AAC,* NT_MEDIA_CODEC_ID_SPEEX,* NT_MEDIA_CODEC_ID_SPEEX_NB,* NT_MEDIA_CODEC_ID_SPEEX_WB,* NT_MEDIA_CODEC_ID_SPEEX_UWB,** @param data audio數據** @param offset data的偏移** @param size data length** @param is_key_frame 是否I幀, if with key frame, please set 1, otherwise, set 0, audio忽略** @param timestamp video timestamp** @param parameter_info 用于AAC special config信息填充** @param parameter_info_size parameter info size** @return {0} if successful*/public native int SmartPublisherPostAudioEncodedDataV2(long handle, int codec_id,ByteBuffer data, int offset, int size,int is_key_frame, long timestamp,byte[] parameter_info, int parameter_info_size);/*** 設置音頻數據(AAC/PCMA/PCMU/SPEEX)** @param codec_id:** NT_MEDIA_CODEC_ID_AUDIO_BASE = 0x10000,* NT_MEDIA_CODEC_ID_PCMA = NT_MEDIA_CODEC_ID_AUDIO_BASE,* NT_MEDIA_CODEC_ID_PCMU,* NT_MEDIA_CODEC_ID_AAC,* NT_MEDIA_CODEC_ID_SPEEX,* NT_MEDIA_CODEC_ID_SPEEX_NB,* NT_MEDIA_CODEC_ID_SPEEX_WB,* NT_MEDIA_CODEC_ID_SPEEX_UWB,** @param data audio數據** @param offset data的偏移** @param size data length** @param is_key_frame 是否I幀, if with key frame, please set 1, otherwise, set 0, audio忽略** @param timestamp video timestamp** @param parameter_info 用于AAC special config信息填充** @param parameter_info_size parameter info size** @param sample_rate 采樣率,如果需要錄像的話必須傳正確的值**@param channels 通道數, 如果需要錄像的話必須傳正確的值, 一般是1或者2** @return {0} if successful*/public native int SmartPublisherPostAudioEncodedDataV3(long handle, int codec_id,ByteBuffer data, int offset, int size,int is_key_frame, long timestamp,byte[] parameter_info, int parameter_info_size,int sample_rate, int channels);

14. 用于編碼后的音頻數據回調,方便對接第三方系統

/*** 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);

總結

細數下來,光audio相關的接口也有20個,可見開發個Android平臺RTMP直播推送模塊多么麻煩,當然因為本文提到的RTMP推送,實際使用的公司或開發者群體比較大,如果只是項目需求,好多是用不到的,可以適當精簡,做個小而美的模塊,不失是個很好的選擇。

總結

以上是生活随笔為你收集整理的Android平台RTSP轻量级服务|RTMP推送摄像头或屏幕之音频接口设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线观看国产一级片 | 污导航在线 | 欧美成人一区二免费视频软件 | 国产又粗又长又黄的视频 | 东方成人av在线 | 青青草网址 | 欧美一级在线观看视频 | 免费看欧美大片 | 亚洲a成人 | 乐播av一区二区三区 | 美女av在线播放 | 色葡萄影院 | 久久99国产精品久久99果冻传媒 | 亚洲成人免费av | jzzjzzjzz亚洲成熟少妇 | 亚洲精品性视频 | 中文在线观看免费视频 | www.亚洲天堂 | 中文字字幕第183页 欧美特级一级片 | 中文字幕日本在线 | 天堂久久久久久 | 国产一区二区三区 | 麻豆av一区二区三区 | 亚洲欧美综合视频 | 黄色一级片在线看 | 好吊妞视频在线观看 | 日韩精品二区在线观看 | 日本黄色美女 | 成人自拍视频在线 | 久久这里只有精品23 | www.97av.com| 国产三级午夜理伦三级 | 亚洲福利在线观看 | 脱女学生小内内摸了高潮 | 精品国产一区二区三区性色av | 欧美高清二区 | 亚洲自拍偷拍一区二区三区 | 色戒电影未测减除版 | 91免费.| 亚洲激情网址 | 国产又白又嫩又爽又黄 | 91免费网站在线观看 | 精品国产亚洲一区二区麻豆 | 6080午夜| 精品国产一区二区三区久久久 | 日本三级片在线观看 | 久久噜噜噜精品国产亚洲综合 | 女仆裸体打屁屁羞羞免费 | www.youjizz日本 | 欧美一区二区在线观看 | 91久久久久| 超碰视屏 | 欧美一级淫片免费视频黄 | 18禁超污无遮挡无码免费游戏 | 一区二区在线影院 | 国产精品老熟女一区二区 | 911美女片黄在线观看游戏 | 毛片大全免费看 | 亚洲第七页 | 黄色av网站在线播放 | 国产av电影一区二区 | 国产成人免费片在线观看 | 嫩模被强到高潮呻吟不断 | 99热成人| 欧洲女女同性videoso | 亚洲一区二区电影 | 国产精品久久在线 | 偷拍自拍一区 | 久久精品视频91 | 欧美做爰性生交视频 | 欧美又大粗又爽又黄大片视频 | 日本少妇xxxx | 青青草自拍视频 | 国产香蕉在线 | 亚洲一区二区三区电影 | 国产老熟女伦老熟妇露脸 | 欧美日韩三区 | 怒海潜沙秦岭神树 | 亚洲欧美字幕 | 疯狂做爰高潮videossex | 好吊色一区二区三区 | 天堂网中文在线观看 | 99热国产 | 少妇久久久久久被弄高潮 | 久久久免费在线观看 | 拔插拔插海外华人免费视频 | 奇米影视在线观看 | 日韩欧美黄色大片 | 国产日韩欧美精品在线观看 | 亚洲国产成人精品女人久久久 | 国产调教在线观看 | 国产免费av一区二区 | 日韩免费av网站 | 成人在线播放网站 | 中文字幕在线观看免费高清 | 久久视频在线观看 | 国产中文字幕三区 | 天堂久久av| 亚洲伦理一区二区三区 |