bagaimana cara menghasilkan beberapa konten HLS bitrate dari aliran rtsp langsung?

5

Saya sedang memutar konten hls bitrate langsung dari aliran rtsp langsung. Saya menggunakan perintah berikut

ffmpeg -v verbose -i rtsp://127.0.0.1:8080/test.sdp \
 -vcodec libx264 -acodec aac -ac 1 -strict -2 -crf 18 -profile:v baseline \
 -maxrate 400k -bufsize 1835k -pix_fmt yuv420p -flags -global_header \
 -hls_time 10 -hls_list_size 3 -hls_wrap 4 -hls_flags delete_segments \
 -start_number 1 /usr/local/apache-tomcat-7.0.53/webapps/ROOT/hls/index1.m3u8

Bagaimana saya bisa memodifikasi perintah ffmpg di atas untuk menghasilkan beberapa konten output bitrate? Tolong bantu aku.

prashanta
sumber

Jawaban:

6
ffmpeg -v verbose -i rtsp://127.0.0.1:8080/test.sdp \
-vcodec libx264 -acodec aac -ac 1 -strict -2 -crf 18 \
-profile:v baseline -maxrate 400k -bufsize 1835k \
-pix_fmt yuv420p -flags -global_header \
-hls_time 10 -hls_list_size 3 -hls_wrap 4 -hls_flags delete_segments \
-start_number 1 /usr/local/apache-tomcat-7.0.53/webapps/ROOT/hls/index1.m3u8 \
-vcodec libx264 -acodec aac -ac 1 -strict -2 -crf 18 \
-profile:v baseline -maxrate 700k -bufsize 1835k \
-pix_fmt yuv420p -flags -global_header \
-hls_time 10 -hls_list_size 3 -hls_wrap 4 -hls_flags delete_segments \
-start_number 1 /usr/local/apache-tomcat-7.0.53/webapps/ROOT/hls/index2.m3u8

dan buat index.m3u8 dengan menunjuk ke stream di atas:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000
hls/index1.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=700000
hls/index2.m3u8
vayvanne
sumber
Selamat datang di Pengguna Super. Bisakah Anda memperluas jawaban untuk menjelaskan apa yang dilakukan kode ini dan bagaimana mengatasi masalah? Kode yang tidak dapat dijelaskan tidak disarankan , karena tidak mengajarkan solusinya. Terima kasih.
fixer1234
Kami menambahkan output kedua dengan parameter yang sama dengan yang pertama tetapi -maxrate 700k dan kemudian membuat indeks multi-bitrate, m3u8 untuk kedua stream HLS.
vayvanne
3

Konsep yang Anda butuhkan untuk menghasilkan banyak output dari satu input dengan ffmpeg ditunjukkan dengan sangat jelas (setidaknya bagi saya itu) di https://trac.ffmpeg.org/wiki/Creating%20multiple%20outputs

pada dasarnya, ffmpeg -i someinput [output_options] someoutput1 [output2_options] someoutput2adalah polanya. Sepertinya Anda sudah tahu cara menggunakan rtsp sebagai input dan Anda tahu cara menghasilkan output tunggal dengan bitrate yang diberikan. Anda juga dapat mengulangi seluruh blok output (semuanya setelah string input rtsp Anda), dan setiap kali ubah resolusi Anda dengan -sdan bitrate Anda (Anda menggunakan -crf sehingga Anda ingin menguranginya untuk res yang lebih tinggi / kualitas yang lebih tinggi dan meningkatkan itu untuk res rendah, kualitas lebih rendah).

Secara pribadi, saya akan menggunakan crf untuk renditions HLS dan dengan libx265, aturan yang saya gunakan adalah frame_width * frame_height * frame_rate * 0.1untuk mendapatkan bitrate "ideal" untuk ukuran frame yang diberikan. Anda harus membalik persamaan jika Anda ingin memilih bitrate yang akan ditargetkan, lalu cari frameize dari itu. Nilai ".1" bisa lebih tinggi, tetapi Anda tidak akan melihat banyak manfaat secara umum (konten yang lebih kompleks akan lebih baik menggunakan nilai yang lebih tinggi) dan saya jarang pergi di bawah 0,07.

rainabba
sumber