WebRTC オーディオおよびビデオ通話 - SDP のビットレート制限を追加または変更する

WebRTC オーディオおよびビデオ通話 - SDP のビットレート制限パラメータを追加または変更します

ossrs サービスを設定する前に、次を確認できます: https://blog.csdn.net/gloryFlow/article/details/132257196
ossrs の音声通話とビデオ通話を呼び出すために iOS を実装する前に、次を確認できます: https://blog.csdn .net/gloryFlow/article/details/132262724
高解像度で画面に問題が表示されない前の WebRTC オーディオおよびビデオ通話については、https: //blog.csdn.net/gloryFlow/article/details/132240952を参照してください。

ここで、WebRTC オーディオおよびビデオ通話中に SDP のビットレート Bitrate を変更します。

1.SDPとは何ですか?

SDP はセッション記述プロトコル (セッション記述プロトコル) です。
SDP は 1 行以上の UTF-8 テキストで構成されます。各行は文字タイプで始まり、その後に等号 (=) が続き、その後に値または説明が含まれます。 構造化テキスト、その形式はタイプによって異なります。以下は SDP コンテンツの例です。

v=0
o=アリス 2890844526 2890844526 IN IP4
s=
c=IN IP4
t=0 0
m=オーディオ 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=ビデオ 51372 RTP/AVP 31
a=rtpmap:31 H261 /90000
m=ビデオ 53000 RTP/AVP 32
a=rtpmap:32 MPV/90000

ローカルで入手した完全な SDP データは次のとおりです。

v=0
\no=SRS/6.0.64(Bee) 107408568903808 2 IN IP4 0.0.0.0
\ns=SRSPublishSession
\nt=0 0
\na=ice-lite
\na=group:BUNDLE 0 1
\na=msid-semantic : WMS ライブ/ライブストリーム
\nm=audio 9 UDP/TLS/RTP/SAVPF 111
\nc=IN IP4 0.0.0.0
\na=ice-fragment:4ahia260
\na=ice-pwd:11777k546394014cto09595g5em82339
\na=fingerprint:sha-256 26:AF:1F:AA:18:C0:4F:69:E3:19:B4:EF:9C:43:98:A9:E6:56:9A:2D:D4:2E:A8:31:D7: B1:C9:A1:08:CA:B2:13
\na=setup:passive
\na=mid:0
\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport -wide-cc-extensions-01
\na=recvonly
\na=rtcp-mux
\na=rtcp-rsize
\na=rtpmap:111 opus/48000/2
/ N N NY EPPPP:111,
301 ) 質問 質問 、10: 0 1 , 10-1
307444 \nm=video 9 UDP/TLS/RTP/SAVPF 96 127 \nc=IN IP4 0.0。 0.0 \na=ice-subfragment:4ahia260 \na=ice-pwd:11777k546394014cto09595g5em82339 \na=指紋 :sha-256 26:AF:1F:AA:18:C0:4F:69:E3:19:B4:EF:9C :43:98:A9:E6:56:9A:2D:D4:2E:A8: 31:D7:B1:C9:A1:08:CA:B2:13 \na=セットアップ:パッシブ \na=mid : 1 \na=extmap:3 http://www.ietf.org/id/draft-holmer -rmcat-transport-wide-cc-extensions-01 \na=recvonly \na=rtcp-mux \na=rtcp-rsize \ na=rtpmap:96 H264/90000













\na=rtcp-fb:96 トランスポート cc
\na=rtcp-fb:96 ナック
\na=rtcp-fb:96 ナック プリ
\na=fmtp:96 レベル非対称許可 = 1;パケット化モード = 1;プロファイル レベル ID=640c33
\na=rtpmap:127 red/90000
\na=candidate:0 1 udp 2130706431 169.254.136.162 8000 typ
ホスト世代 0 \na=candidate:1 1 udp 2130706431 192.168.10.100 8 000 typ ホスト世代 0
\n

上記のデータ形式からわかるように、

などの一般的な

m はメディアを表し、
m=audio はこの行が音声情報を記述することを意味します。
m=video は、この行がビデオ情報を記述することを意味します。

a は、a=candidate などの属性を表します。これは、この行が候補情報を記述することを意味します。

そして、解像度に関連するプロファイルレベルID 640c33が表示されます

2. SDP のビットレート制限パラメータを追加または変更します

次に、SDP のコード レート Bitrate を変更する必要があります。b=AS がない場合は、新しいものを追加します。

具体的なコードは以下の通り

+ (NSString *)setMediaBitrate:(NSString *)sdp media:(NSString *)media bitrate:(int)bitrate {
    
    
    if (!(sdp && [sdp isKindOfClass:[NSString class]] && sdp.length > 0)) {
    
    
        return sdp;
    }
    
    NSMutableArray *lines = [NSMutableArray arrayWithArray:[sdp componentsSeparatedByString:@"\n"]];
    int line = -1;
    for (int i = 0; i < lines.count; i++) {
    
    
        NSString *start = [NSString stringWithFormat:@"m=%@",media];
        if ([lines[i] hasPrefix:start]) {
    
    
            line = i;
            break;
        }
    }
    
    if (line == -1) {
    
    
        NSLog(@"Could not find the m line for %@", media);
        return sdp;
    }
    
    NSLog(@"Found the m line for %@", media);
    line++;
    
    while ([lines[line] hasPrefix:@"i="] || [lines[line] hasPrefix:@"c="]) {
    
    
        line++;
    }
    
    if ([lines[line] hasPrefix:@"b"]) {
    
    
        NSLog(@"Replaced b line at line:%d", line);
        lines[line] = [NSString stringWithFormat:@"b=AS:%d", bitrate];

        return [lines componentsJoinedByString:@"\n"];
    }
    
    NSLog(@"Adding new b line before line:%d", line);
    NSMutableArray *newLines = [NSMutableArray arrayWithArray:[lines subarrayWithRange:NSMakeRange(0, line)]];
    
    NSMutableArray *aLeftLines = [NSMutableArray arrayWithArray:[lines subarrayWithRange:NSMakeRange(line, lines.count - line)]];
    
    NSString *aLineStr = [NSString stringWithFormat:@"b=AS:%d", bitrate];
    [newLines addObject:aLineStr];
    
    NSMutableArray *resultLines = [NSMutableArray arrayWithCapacity:0];
    [resultLines addObjectsFromArray:newLines];
    [resultLines addObjectsFromArray:aLeftLines];

    return [resultLines componentsJoinedByString:@"\n"];
}

レンダリング

ここに画像の説明を挿入

3. まとめ

WebRTC オーディオおよびビデオ通話 - SDP のビットレート制限パラメーターを追加または変更します。内容が多く、不正確な記述があるかもしれませんが、ご容赦ください。

https://blog.csdn.net/gloryFlow/article/details/132263021

学習記録、日々改善を続けてください。

おすすめ

転載: blog.csdn.net/gloryFlow/article/details/132263021