多人音視頻實時通訊架構

直播中的協議與格式

在直播系統中,協議和格式的選擇對于傳輸效率、畫面質量和用戶體驗都至關重要。以下是直播中常見的協議與格式:

協議

  1. RTSP (Real Time Streaming Protocol)

    • RTSP是一個網絡流媒體協議,常用于視頻監控和IPTV等場景。它本身并不傳輸數據,而是充當媒體服務器與客戶端之間的通信協議。
    • RTSP支持TCP和UDP傳輸,通常使用RTP(Real-time Transport Protocol)來傳輸音視頻數據,并使用RTCP(RTP Control Protocol)進行流量控制和會話管理。
    • RTSP的優點是實時性好,時延低,但技術實現相對復雜。
  2. RTMP (Real Time Messaging Protocol)

    • RTMP是由Adobe公司開發的一種設計用來進行實時數據通信的網絡協議。
    • 它最初是為Flash Player設計的,但現在已經擴展到了其他平臺和設備。
    • RTMP通常使用TCP作為傳輸協議,具有較好的穩定性和可靠性。
    • RTMP廣泛應用于PC端的直播和點播場景,但由于其專有性,一些設備或平臺可能不支持。
  3. HLS (HTTP Live Streaming)

    • HLS是由蘋果公司開發的基于HTTP的流媒體網絡傳輸協議。
    • 它通過將整個流分割成一系列小的基于HTTP的文件來工作,這使得流可以在任何支持HTTP的設備上進行播放。
    • HLS通常用于移動設備和Web瀏覽器的直播和點播場景。
    • HLS的優點是跨平臺兼容性好,但時延相對較高。

格式

在直播中,常見的音視頻格式包括FLV(Flash Video)和HLS切片(TS文件)。

  1. FLV (Flash Video)

    • FLV是Adobe公司推出的一種網絡流媒體數據容器格式。
    • 它具有文件體積小、加載速度快、適合網絡傳輸等特點。
    • FLV格式廣泛應用于PC和移動端的直播和點播場景。
    • 由于其專有性,一些設備或平臺可能不支持FLV格式。
  2. HLS切片 (TS文件)

    • HLS切片是將音視頻流分割成一系列小的TS(Transport Stream)文件。
    • 每個TS文件都是一個獨立的媒體片段,可以通過HTTP協議進行傳輸和播放。
    • HLS切片格式廣泛應用于移動設備和Web瀏覽器的直播和點播場景。
    • HLS切片格式的優點是跨平臺兼容性好,但文件數量多,可能會導致管理復雜。

在直播系統中,主播端和觀眾端的需求是不同的。主播端需要進行音視頻數據的采集、編碼和推流,而觀眾端則需要進行拉流、解碼和播放。信令服務器則負責處理與業務相關的邏輯,如創建房間、加入房間等。CDN網絡則負責媒體數據的分發,確保觀眾能夠快速獲取到媒體流。

主播在進行直播時,首先會向信令服務器發送創建房間的信令。信令服務器收到信令后,會返回一個推流地址給主播。主播端在獲取到推流地址后,就可以將音視頻數據推送給CDN網絡。觀眾在觀看直播時,會向信令服務器發送加入房間的信令。信令服務器會根據觀眾所在地區分配一個最接近的CDN邊緣節點地址給觀眾。觀眾在獲取到拉流地址后,就可以從該地址拉取媒體流進行觀看。

在直播系統中,推流通常使用RTMP協議,而拉流可以選擇使用RTMP協議或HLS協議。選擇哪種協議取決于具體的應用場景和需求。例如,對于需要實時互動和較低時延的場景,RTMP可能更適合;而對于需要跨平臺兼容性和較好網絡適應性的場景,HLS可能更合適。

HTTP-FLV 介紹

HTTP-FLV 是一種基于 HTTP 協議的流媒體傳輸方式,其中流媒體數據被封裝成 FLV 格式。FLV(Flash Video)是 Adobe 公司推出的一種輕量級視頻格式,特別適合網絡傳輸和流媒體應用。由于其簡單的結構和較小的媒體頭部信息,FLV 文件的加載速度非常快。

FLV 文件結構

FLV 文件由 FLV Header(FLV 頭部)、FLV Body(FLV 主體)以及其他 Tag 組成。這種流式文件格式允許隨時向文件末尾添加音視頻數據,而不會破壞文件的整體結構。這是 FLV 與其他媒體文件格式(如 MP4、MOV)的主要區別之一,后者通常是結構化的,音頻和視頻數據分開存放。

HTTP-FLV 的特點

  1. 基于 HTTP 協議:HTTP-FLV 使用 HTTP 作為傳輸協議,這意味著流媒體數據可以通過標準的 Web 服務器進行傳輸,無需專門的流媒體服務器。
  2. 良好的防火墻穿透性:由于 HTTP-FLV 基于 HTTP/80 傳輸,它通常能夠更容易地穿透防火墻,有效避免被防火墻攔截。
  3. 靈活的調度和負載均衡:通過 HTTP 302 跳轉,HTTP-FLV 可以實現靈活的調度和負載均衡,提高系統的可擴展性和可靠性。
  4. 支持加密傳輸:可以使用 HTTPS 對 HTTP-FLV 流進行加密傳輸,增強數據的安全性。
  5. 廣泛的設備兼容性:HTTP-FLV 兼容 Android、iOS 等移動設備,以及支持使用 flv.js 在網頁播放端播放 FLV 文件,無需依賴 Flash。

flv.js

flv.js 是一個由 bilibili 公司開源的項目,它允許在瀏覽器中解析 FLV 文件并轉換成 BMFF(一種 MP4 格式)片段,然后通過 HTML5 的?<video>?標簽進行播放。這使得在不借助 Flash 的情況下,瀏覽器也能播放 FLV 文件。

HTTP-FLV 的缺點

  1. 保密性不足:由于 HTTP-FLV 的傳輸特性,流媒體資源可能會緩存在本地客戶端,這可能會導致保密性問題。
  2. 網絡流量較大:相較于其他優化過的流媒體格式,FLV 格式可能會產生較大的網絡流量。

綜上所述,HTTP-FLV 是一種基于 HTTP 協議的流媒體傳輸方式,具有良好的防火墻穿透性、設備兼容性和靈活性,但也存在一些如保密性和網絡流量方面的缺點。

?

搭建一個基于 Nginx 的直播服務器確實需要一些步驟,包括安裝依賴、下載源碼、編譯安裝等。以下是針對您提供的步驟的詳細解釋和補充:

安裝依賴

在大多數 Linux 發行版中,可以使用包管理器來安裝依賴。例如,在基于 Debian 的系統(如 Ubuntu)中,可以使用?apt-get,而在基于 Red Hat 的系統(如 CentOS)中,可以使用?yum

對于基于 Debian 的系統,您可以使用以下命令安裝依賴:

 

sudo apt-get update
sudo apt-get install -y libpcre3 libpcre3-dev libssl-dev zlib1g-dev gcc wget unzip vim make curl

對于基于 Red Hat 的系統,您可以使用以下命令安裝依賴:

 

sudo yum install -y pcre pcre-devel openssl openssl-devel zlib zlib-devel gcc wget unzip vim make curl

下載源碼

您需要下載 Nginx 的源碼以及?nginx-http-flv-module?模塊。這個模塊是為了支持 FLV 流媒體而開發的。

下載并解壓?nginx-http-flv-module

 

wget https://github.com/winshining/nginx-http-flv-module/archive/master.zip
unzip master.zip

下載并解壓 Nginx 源碼:

 

wget http://nginx.org/download/nginx-1.17.6.tar.gz
tar -zxvf nginx-1.17.6.tar.gz

編譯安裝

進入 Nginx 源碼目錄,并使用?./configure?腳本來配置編譯選項。在這個例子中,我們將?nginx-http-flv-module?作為一個模塊添加進來。

 
cd nginx-1.17.6
./configure --add-module=../nginx-http-flv-module-master

然后編譯并安裝 Nginx:

 

make
sudo make install

安裝完成后,Nginx 通常會被安裝在?/usr/local/nginx?目錄下。

配置 Nginx

安裝完成后,您需要配置 Nginx 以支持直播流。這通常涉及到編輯 Nginx 的配置文件(通常位于?/usr/local/nginx/conf/nginx.conf),并添加相應的服務器塊和位置塊來處理 RTMP 和 HTTP-FLV 流。

啟動 Nginx

最后,您可以啟動 Nginx 服務:

 

sudo /usr/local/nginx/sbin/nginx

注意事項

  • 確保您的服務器具有足夠的資源和帶寬來處理直播流。
  • 根據您的需求,您可能還需要配置防火墻和其他安全措施來保護您的服務器和流媒體內容。
  • 定期檢查并更新 Nginx 和相關模塊,以確保安全性和性能。

?配置 Nginx 以支持 RTMP 流媒體服務

要配置 Nginx 以支持 RTMP 流媒體服務,您需要在?nginx.conf?文件中添加相應的 RTMP 配置塊。以下是一個基本的示例配置,用于設置 RTMP 服務、點播(VOD)和直播流。

首先,打開?nginx.conf?文件,通常位于?/usr/local/nginx/conf/?目錄下。然后,在?http?塊之后添加一個新的?rtmp?塊。以下是一個簡單的配置示例:

 

# nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
# ... 其他 http 配置 ...
server {
listen 8000;
server_name localhost;
# ... 其他 http server 配置 ...
location / {
# ... 其他 location 配置 ...
}
}
}
rtmp {
server {
listen 1935;
chunk_size 4096;
# 設置 VOD(點播)路徑
application vod {
play /path/to/vod/files;
}
# 設置直播流
application live1 {
live on;
record off;
}
# 設置 HLS(HTTP Live Streaming)直播流
application hls1 {
live on;
hls on;
hls_path /path/to/hls/files;
hls_fragment 5s;
}
}
}

在這個配置中:

  • rtmp?塊定義了 RTMP 服務器的配置。
  • server?塊中的?listen 1935;?指定了 RTMP 服務的監聽端口。
  • chunk_size?指定了從客戶端讀取數據塊的大小。
  • application vod?塊配置了 VOD(點播)服務,其中?play?指令指定了存放點播文件的目錄。
  • application live1?塊配置了直播流服務,其中?live on;?啟用了直播功能,record off;?表示不記錄直播流。
  • application hls1?塊配置了 HLS(HTTP Live Streaming)直播流服務,其中?hls on;?啟用了 HLS 功能,hls_path?指定了 HLS 分片文件的存儲路徑,hls_fragment?指定了每個 HLS 分片的時間長度。

保存并關閉?nginx.conf?文件后,您可以使用以下命令檢查配置文件的正確性:

 

/usr/local/nginx/sbin/nginx -t

如果配置正確,您將看到類似于 "nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful" 的消息。

然后,您可以啟動或重新加載 Nginx 以應用新的配置:

 

/usr/local/nginx/sbin/nginx

或者,如果您只是想重新加載配置而不停止服務,可以使用:

 

/usr/local/nginx/sbin/nginx -s reload

最后,您可以通過訪問?http://xxxx:8000?來驗證 Nginx 的 HTTP 服務是否成功啟動。請確保將?xxxx?替換為您的服務器地址或域名。

請注意,上述配置只是一個基本示例,您可能需要根據您的具體需求進行調整。此外,確保您的服務器具有足夠的資源來處理流媒體傳輸,并且已正確設置防火墻和安全措施。

?點 播 訪 問

要使用 VLC 播放器訪問 RTMP 流媒體服務器上的點播視頻,您需要確保已經按照之前的步驟正確配置了 Nginx 和 RTMP 模塊,并且已經在指定的 VOD(點播)目錄下放置了視頻文件。

以下是如何使用 VLC 播放器來訪問和播放 RTMP 點播視頻的步驟:

  1. 下載并安裝 VLC 播放器
    訪問 VLC 官方網站(https://www.videolan.org/),下載適合您操作系統的?VLC 播放器安裝包,并按照提示進行安裝。

  2. 啟動 VLC 播放器
    打開 VLC 播放器應用程序。

  3. 打開網絡流
    在 VLC 播放器中,選擇“媒體”(Media)菜單,然后選擇“打開網絡流”(Open Network Stream)。

  4. 輸入 RTMP 流地址
    在彈出的窗口中,輸入您的 RTMP 流地址。該地址應該是類似于這樣的格式:rtmp://[服務器地址]:1935/vod/[視頻文件名]。例如,如果您在之前的配置中將服務器地址設置為?124.221.103.27,并且有一個名為?01.mp4?的視頻文件在 VOD 目錄下,那么您應該輸入:

     
    rtmp://124.221.103.27:1935/vod/01.mp4
  5. 播放視頻
    點擊“播放”(Play)按鈕,VLC 播放器應該會開始從 RTMP 服務器上接收并播放視頻流。

請注意,由于網絡延遲、服務器性能或帶寬限制等因素,視頻可能需要一些時間才能開始播放。同時,確保您的防火墻和安全設置允許 VLC 播放器訪問 RTMP 服務器。

此外,如果視頻沒有按預期播放,請檢查以下幾點:

  • 確保 Nginx 服務器正在運行并且 RTMP 模塊已正確配置。
  • 確保視頻文件位于 VOD 目錄中,并且該文件具有正確的文件路徑和格式。
  • 確保您的服務器地址和端口號正確無誤。
  • 檢查網絡連接是否穩定,并且沒有阻止 RTMP 流量的防火墻或安全組規則。

如果您遇到任何問題,可以查看 VLC 播放器的日志文件或 Nginx 的錯誤日志以獲取更多信息。

直 播 訪問?

確實,FFmpeg 是一個非常強大的工具,它不僅可以用來處理已經存在的音視頻文件,還可以通過命令行實時地推送音視頻流到流媒體服務器上,實現直播功能。對于直播場景,您可以使用 FFmpeg 從攝像頭、屏幕捕獲或其他視頻源捕獲視頻流,并將其推送到 Nginx 或其他 RTMP 服務器。

以下是一個基本的示例,展示如何使用 FFmpeg 將本地視頻文件推送到 RTMP 服務器:

 
ffmpeg -re -i input.mp4 -c:v libx264 -c:a aac -f flv rtmp://[服務器地址]:1935/live1/[流名稱]

在這個命令中:

  • -re?參數表示以實時速度推送流,這對于直播很重要,因為它防止了視頻數據的緩沖和突然的快進。
  • -i input.mp4?指定了輸入文件,但在直播場景中,您可能會使用其他參數(如?-f v4l2?用于捕獲攝像頭視頻)來替代。
  • -c:v libx264?和?-c:a aac?分別指定了視頻和音頻的編解碼器。
  • -f flv?指定了輸出格式為 FLV,這是 RTMP 流通常使用的格式。
  • rtmp://[服務器地址]:1935/live1/[流名稱]?是 RTMP 服務器的地址和流名稱,您需要根據您的服務器配置來替換這些值。

對于實時捕獲視頻流(例如從攝像頭),您可以使用類似以下的命令:

 
ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset veryfast -maxrate 3000k -bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ac 2 -ar 44100 -f flv rtmp://[服務器地址]:1935/live1/[流名稱]

在這個命令中:

  • -f v4l2 -i /dev/video0?用于在 Linux 系統上從?/dev/video0?捕獲攝像頭視頻。在 Windows 上,您需要使用不同的參數。
  • -preset veryfast?和?-maxrate 3000k -bufsize 6000k?設置了視頻編碼的速度和比特率控制。
  • -pix_fmt yuv420p?設置了像素格式為 yuv420p,這是大多數 RTMP 服務器所期望的格式。
  • -g 50?設置了關鍵幀間隔。
  • -c:a aac -b:a 160k -ac 2 -ar 44100?設置了音頻編解碼器和相關參數。

請注意,這些命令需要根據您的具體環境和需求進行調整。特別是,您需要根據您的攝像頭、音頻輸入以及 RTMP 服務器的配置來選擇合適的參數。

此外,對于 Windows 用戶,您需要確保下載并安裝了適用于 Windows 的 FFmpeg 版本,并且將其添加到系統的 PATH 環境變量中,以便在命令行中直接調用?ffmpeg?命令。

?HLS ?直 播 實

1. 準備環境

確保您已經安裝了FFmpeg和Nginx,并且Nginx已經安裝了rtmp模塊和http_flv_module模塊,以便支持RTMP和HLS。

2. 推流

使用FFmpeg將視頻文件推送到RTMP服務器。您提供的命令如下:

 
.\ffmpeg -re -i D:\Temp\03.mp4 -c copy -f flv rtmp://124.221.103.27:1935/hls1/test
  • -re:以實時速度推送流,防止數據緩沖。
  • -i D:\Temp\03.mp4:指定輸入文件路徑。
  • -c copy:復制原始編解碼器而不進行轉碼。
  • -f flv:設置輸出格式為FLV,這是RTMP流常用的格式。
  • rtmp://124.221.103.27:1935/hls1/test:指定RTMP服務器的地址和流名稱。

3. HLS切片

當視頻流通過RTMP推送到服務器后,Nginx會根據配置將FLV流切割成一系列小的TS(Transport Stream)文件,這些文件構成了HLS流。這些文件通常存儲在服務器的某個目錄下,比如您提到的/usr/local/nginx/html/hls1

4. 播放HLS流

HLS流可以通過任何支持HLS的播放器播放,比如VLC。您提供的播放URL如下:

 
http://124.221.103.27:8000/hls1/

請注意,這里應該是一個m3u8的索引文件,例如http://124.221.103.27:8000/hls1/test.m3u8,該文件列出了所有的TS切片文件。播放器會解析這個m3u8文件,并按照列表中的順序下載和播放TS文件。

可能的問題和改進

  • 切片延遲:由于HLS的工作機制,觀眾可能會看到幾秒鐘的延遲,因為需要等待足夠的TS文件生成才能開始播放。
  • 音畫不同步:有時可能會出現只有聲音沒有圖像的情況。這可能是由于編解碼器兼容性問題、網絡延遲或服務器配置不當導致的。檢查FFmpeg的輸出日志和Nginx的錯誤日志可以提供更多線索。
  • 配置優化:根據您的網絡狀況和服務器性能,您可能需要調整Nginx的HLS配置,包括切片大小、切片間隔等,以優化播放體驗。
  • 帶寬管理:確保服務器和網絡的帶寬足夠支持直播流的傳輸,特別是在高碼率或高分辨率的情況下。
  • 錯誤處理:在推流和播放過程中,應該有適當的錯誤處理機制,以便在出現問題時能夠迅速定位并解決。

通過合理配置和優化,您應該能夠實現穩定的HLS直播流。

?HLS ?直 播 實戰

?

要在瀏覽器中播放直播流,您確實需要遵循一些步驟來設置HTML頁面,并使用適當的播放器庫,如video.jsvideo.js是一個流行的、功能豐富的開源播放器,支持多種媒體格式和傳輸協議,包括HLS(HTTP Live Streaming)。

以下是您需要在瀏覽器中播放直播流的大致步驟:

  1. 創建HTML頁面
    創建一個新的HTML文件(例如play.html),并在其中加入必要的結構。

  2. 引入video.js庫
    在HTML頁面的<head>部分,您需要引入video.js的CSS樣式文件和JavaScript庫。通常,這些文件可以從CDN(內容分發網絡)上獲取,或者如果您有本地副本,也可以從本地引入。

     

    <link href="https://unpkg.com/video.js/dist/video-js.css" rel="stylesheet">
    <script src="https://unpkg.com/video.js/dist/video.js"></script>
  3. 添加video標簽
    在HTML頁面的<body>部分,添加一個<video>標簽,并為其指定一個ID,以便稍后通過JavaScript來控制它。您還需要在<video>標簽中指定要播放的直播流的URL。

     

    <video id="my-video" class="video-js" controls preload="auto" width="640" height="264" data-setup='{}'>
    <source src="http://124.221.103.27:8000/hls1/test.m3u8" type="application/x-mpegURL">
    </video>

    注意:controls屬性添加了播放、暫停和音量控制等UI元素;preload="auto"意味著視頻會在頁面加載時開始加載;data-setup='{}'是video.js初始化所需的。

  4. 初始化video.js播放器
    您需要在頁面加載完成后初始化video.js播放器。這通常通過在<script>標簽中添加JavaScript代碼來完成。

     

    <script>
    var player = videojs('my-video');
    </script>

    上述代碼會找到ID為my-video<video>元素,并初始化video.js播放器。

  5. 上傳網頁到Web服務器
    由于瀏覽器安全限制,通常不允許從本地文件系統加載流媒體內容。因此,您需要將HTML頁面和任何相關的資源上傳到Web服務器上。您已經提到將網頁上傳到了Nginx服務器上,這是正確的做法。

  6. 通過瀏覽器訪問網頁
    一旦網頁上傳到服務器,您就可以通過瀏覽器訪問它,比如通過URL?http://124.221.103.27:8000/play.html。確保您的Nginx服務器已經正確配置,以提供對HTML頁面和直播流內容的訪問。

確保您的Nginx服務器已經配置了對HLS的支持,并且已經設置了適當的CORS策略,以允許瀏覽器從不同的源加載視頻流。

請注意,以上步驟是一個概述,并且根據您的具體環境和需求可能有所不同。您可能還需要對Nginx和video.js進行進一步的配置和優化,以確保最佳的播放性能和用戶體驗。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713736.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713736.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713736.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

考研機試C++題目精選

更多內容會在godownio.github.io更新 算法練習&#xff08;C代碼&#xff09; 考研上機或C語言代碼筆試準備&#xff0c;暨大機試原題letcode牛客中南大等高校機試 快速冪算法 題目&#xff1a;輸入一個整數 n &#xff0c;求 n^n 的個位數是多少。 快速冪算法&#xff1a;…

面經分享|面了好未來NLP算法崗(實習),經歷坎坷但值了!

節前&#xff0c;我們組織了一場算法崗技術&面試討論會&#xff0c;邀請了一些互聯網大廠同學、參加社招和校招面試的同學&#xff0c;針對大模型技術趨勢、大模型落地項目經驗分享、新手如何入門算法崗、該如何備戰、面試常考點分享等熱門話題進行了深入的討論。 今天我分…

【復試2.293.1】c語言——基礎雜項

1.define定義常量類似全局變量&#xff0c;引用是直接拼到代碼中去。 2.關于e 3.參數傳遞 形參直接接收的是數組的起始地址 4.數組越界亂碼問題 5.scanf讀字符串的時候會自動在末尾放0&#xff08;結束符 6.scanf是讀取輸入緩沖區的數據&#xff0c;是一種拿走操作。讀取若有…

文本多分類

還在用BERT做文本分類&#xff1f;分享一套基于預訓練模型ERNIR3.0的文本多分類全流程實例【文本分類】_ernir 文本分類-CSDN博客 /usr/bin/python3 -m pip install --upgrade pip python3-c"import platform;print(platform.architecture()[0]);print(platform.machine…

C語言實現航班管理

航班管理系統&#xff0c;用C語言實現&#xff0c;可以作為課程設計&#xff0c;代碼如下&#xff1a; #include<iostream> #include<fstream> #include<vector> #include<string> #include<stdlib.h> using namespace std; //信息基類 clas…

Linux第67步_linux字符設備驅動_注冊和注銷

1、字符設備注冊與注銷的函數原型” /*字符設備注冊的函數原型*/ static inline int register_chrdev(unsigned int major,\ const char *name, \ const struct file_operations *fops) /* major:主設備號&#xff0c;Limnux下每個設備都有一個設備號&#xff0c;設備號分…

【六袆 - React】Next.js:React 開發框架;Next.js開發框架的特點

Next.js&#xff1a;React 開發框架 Next.js的特點 1.直觀的、基于頁面的路由系統&#xff08;并支持動態路由&#xff09; Next.js 提供了基于文件系統的路由&#xff0c;意味著你可以通過創建頁面文件來定義路由。 偽代碼示例&#xff1a; // pages/index.js export defa…

【GStreamer】basic-tutorial-2:創建、鏈接GstElement,修改其屬性、狀態

【目錄】郭老二博文之:圖像視頻匯總 1、示例注釋 #include <gst/gst.h>int main (int argc, char *argv[]) {GstElement *pipeline,

MYSQL--JDBC優化

一.JDBC優化: 優化前提: 有時候我們并不清楚某些表當中一共有多少列,以及這些列的數據類型,這個時候我們就需要提前通過一些方法提前了解到這些數據,從而更好的進行輸出 具體語句: package cn.jdbc;import java.sql.*;public class JDBCDEmo1 {public static void main(String…

C語言中的動態內存管理技巧:實現靈活的內存分配和釋放

概念 在C語言中&#xff0c;動態內存管理是實現靈活內存分配和釋放的關鍵。合理地管理動態內存可以提高程序的效率和擴展性。本文將介紹C語言中常用的動態內存管理方法和技巧&#xff0c;幫助讀者優化內存分配和釋放的過程。 常用的動態內存管理方法 內存分配&#xff1a;C語…

【數學建模獲獎經驗】2023第八屆數維杯數學建模:華中科技大學本科組創新獎獲獎分享

2024年第九屆數維杯大學生數學建模挑戰賽將于&#xff1a;2024年5月10日08:00-5月13日09:00舉行&#xff0c;近期同學們都開始陸續進入了備賽階段&#xff0c;今天我們就一起來看看上一屆優秀的創新獎選手都有什么獲獎感言吧~希望能幫到更多熱愛數學建模的同學。據說點贊的大佬…

elment-ui table表格排序后 清除排序箭頭/恢復默認排序 的高亮樣式

問題描述&#xff1a; 1.默認排序是按照名稱升序排列&#xff08;圖一&#xff09; 2.在選擇了篩選項以及其他排序方式之后&#xff0c;箭頭高亮是這樣的&#xff08;圖二&#xff09; 3.當我點擊清空按鈕后&#xff0c;類型清空了&#xff0c;并且傳給后端的排序方式是名稱/升…

探索色彩搭配的奧秘:如何選擇適合產品的理想配色方案

title: 探索色彩搭配的奧秘&#xff1a;如何選擇適合產品的理想配色方案 date: 2024/3/1 20:47:45 updated: 2024/3/1 20:47:45 tags: 色彩搭配品牌形象用戶體驗情感連接信息傳達視覺層次色調選擇 引言 友善的色彩搭配和色調選擇是現代產品設計中不可忽視的關鍵因素。通過正確…

Linux yum安裝pgsql出現Bad GPG signature錯誤

官方文檔&#xff1a;https://www.postgresql.org/download/linux/redhat/ sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql12-server sudo /usr/pgsql-12/bin/…

Rust使用calamine讀取excel文件,Rust使用rust_xlsxwriter寫入excel文件

Rust使用calamine讀取已存在的test.xlsx文件全部數據&#xff0c;還讀取指定單元格數據&#xff1b;Rust使用rust_xlsxwriter創建新的output.xlsx文件&#xff0c;并寫入數據到指定單元格&#xff0c;然后再保存工作簿。 Cargo.toml main.rs /*rust讀取excel文件*/ use cala…

Pytest-parametrize實現測試用例與測試數據分離

Pytest自動化框架&#xff0c;實現自動化測試用例與測試數據分離方法&#xff1a; 1.測試用例數據準備&#xff0c;使用yaml文件編輯&#xff0c;如下述teladress.yaml 2.通過pytest框架裝飾器pytest.mark.parametrize實現測試數據傳參 示例&#xff1a; 測試用例文件&…

Tomcat 架構

一、Http工作原理 HTTP協議是瀏覽器與服務器之間的數據傳送協議。作為應用層協議&#xff0c;HTTP是基于TCP/IP協議來傳遞數據的&#xff08;HTML文件、圖片、查詢結果等&#xff09;&#xff0c;HTTP協議不涉及數據包&#xff08;Packet&#xff09;傳輸&#xff0c;主要規定了…

c語言之字符串的輸入和輸出

c語言在輸出字符串時&#xff0c;用格式符‘%s"&#xff0c;代碼比較簡潔 如果說數組長度大于字符串長度&#xff0c;也只輸出\0前的內容 字符串默認后面有\0. 如果字符串有多個\0&#xff0c;會默認在第一個\0結束 #include<stdio.h> int main() {int i;char a…

GO數組切片

1. 數組 數組是一個由固定長度的特定類型元素組成的序列&#xff0c;一個數組可以由零個或多個元素組成。 因為數組的長度是固定的&#xff0c;所以在Go語言中很少直接使用數組。 Go語言數組的聲明&#xff1a; var 數組變量名 [元素數量]Type 1 數組變量名&#xff1a;數…

本地快速部署谷歌開放模型Gemma教程(基于WasmEdge)

本地快速部署谷歌開放模型Gemma教程&#xff08;基于WasmEdge&#xff09; 一、介紹 Gemma二、部署 Gemma2.1 部署工具2.1 部署步驟 三、構建超輕量級 AI 代理四、總結 一、介紹 Gemma Gemma是一系列輕量級、最先進的開放式模型&#xff0c;采用與創建Gemini模型相同的研究和技…