日韩性视频-久久久蜜桃-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推送摄像头或屏幕之音频接口设计的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 三级中文字幕在线 | 国产精品久久9 | 三级黄色小视频 | 香蕉色网 | 美国av导航 | 国产白丝一区二区三区 | av一卡 | 国产人妻精品午夜福利免费 | 丁香一区二区三区 | 国产xxxxwwww | 久久狠狠爱| 亚洲欧洲日本在线 | 狠狠干五月| 国内精品久久久久久久影视简单 | 欧美日韩精品在线观看 | 日本一区二区在线看 | 欧美亚洲视频在线观看 | 久久精品性爱视频 | 精品久久久久久国产 | 少妇视频一区二区三区 | 久久人人视频 | 亚洲va久久久噜噜噜久久天堂 | 国产中文欧美日韩在线 | 韩日黄色| free性欧美69巨大 | 久久88| 高清中文字幕 | 亚洲精品国产成人久久av盗摄 | 成人在线直播 | 美人被强行糟蹋np各种play | 朝鲜美女黑毛bbw | 人妻射精一区二区 | 日韩在线播放一区二区 | 久久久久亚洲精品中文字幕 | 成人动漫av在线 | 97超碰人人澡人人爱学生 | 欧美一a| 久久久久久久综合 | 波多野结衣在线一区二区 | 不卡福利视频 | 欧美精品久久99 | 日本高清www免费视频 | 激情亚洲色图 | 日韩欧美中文字幕一区二区 | a级片中文字幕 | 性xx紧缚网站 | 老熟妇一区二区三区 | 狂野欧美性猛交xxxx | 在线视频中文字幕 | 久久中出 | 美女校花脱精光 | 欧美做受xxxxxⅹ性视频 | 国产欧美激情 | 最新中文在线视频 | 97九色 | 色狠狠一区 | 2020自拍偷拍 | 日韩精品1区 | 国产微拍一区 | 五月天爱爱 | 乱色精品无码一区二区国产盗 | 嫩草午夜少妇在线影视 | 国产第五页 | 亚洲国产日韩a在线播放性色 | 日韩小视频| 美女在线不卡 | 国产色在线 | 日本黄色电影网址 | 久色88 | 亚洲资源av | 亚洲国产精品免费视频 | 婷婷视频网 | 国产精品麻豆入口 | 中国av毛片 | 亚洲+小说+欧美+激情+另类 | 亚洲AV无码成人精品区明星换面 | 国产一区二区三区精品在线观看 | 波多野吉衣久久 | 亚洲国产成人无码av在线 | 欧美日韩激情在线 | 成人刺激视频 | 国内精品视频在线播放 | 自拍偷拍激情视频 | 五月天一区二区 | 欧美brazzers | 国内久久精品视频 | 玩弄人妻少妇500系列 | 欧美激情中文字幕 | 国产精品久久久久久久久久久久午夜片 | 人妖黄色片| 天天爱综合 | 99热免费在线 | 无遮挡裸光屁屁打屁股男男 | 热热热av| 日韩123区| 看免费一级片 | 免费看国产精品 | 亚洲综合色在线观看 | 另类中文字幕 |