跳转到内容

Puredyne/流媒体音频和视频

来自维基教科书,开放世界中的开放书籍

待办事项

Liquid Soap

[编辑 | 编辑源代码]

待办事项

ffmpeg2theora

[编辑 | 编辑源代码]

运行一次

mkfifo stream.ogv

然后要流式传输,运行这两行

dvgrab - | ffmpeg2theora -f dv -x 352 -y 288 -v 7 -o stream.ogv - &
cat stream.ogv | oggfwd icecast.example.org 8000 password /stream.ogv

如果编码速度比实时速度慢,并且你的 CPU 内核已满载,请调整大小和质量(-v)以降低。如果你的 CPU 负载低于 50% 并且视频流畅但难看,请将它们提高。如果编码跟不上实时速度,则你的流式传输会中断。观察 Shell 中的第二个计时器 - 它们都应该几乎处于相同的值。

待办事项

你可以在线流式传输你的视频:FreeJ 使用 Ogg/Theora 编解码器进行编码并广播到 Icecast 服务器。

在流式传输音频通道时,你还需要运行一个 Jack 守护进程并将它连接到 FreeJ 输出。

在流式传输期间,还可以实时保存视频的本地副本。以下是一个脚本示例

<syntaxhighlight lang="text"> // 音频输入通过 Jack 从运行的其他应用程序获取

// 端口名称 缓冲区大小 采样率

audio = new AudioJack("alsaplayer", 2048, 44100);

// 酌情调整以下值,请参阅 Jack 文档


// 创建一个视频编码器对象

// 值 1-100 视频质量 视频比特率 音频质量 音频比特率

encoder = new VideoEncoder(10, 64000, 0, 24000);

// 将音频通道添加到编码的视频中

encoder.add_audio(audio);


// 配置编码器以通过 Icecast 服务器流式传输

encoder.stream_host("giss.tv");

encoder.stream_port(8000);

encoder.stream_title("testing new freej");

encoder.stream_username("source");

encoder.stream_password("2t645");

encoder.stream_mountpoint("freej-test.ogg");

// 在运行的 FreeJ 引擎上注册编码器

register_encoder(encoder);

// 开始网络流式传输

encoder.start_stream();

// 将流式传输记录到本地文件

encoder.start_filesave('Video/freej-test.ogg');

</syntaxhighlight lang="text">

我们可以将上面的代码粘贴到一个脚本中,并使用 freej -j stream.js 运行它。

除了调整此脚本以适应各种帐户外,还可以将它作为更大型 FreeJ 脚本的一部分来包含,以将多个源与文本和效果混合,甚至可以通过 MIDI、OSC 或操纵杆来控制它。

Gstreamer

[编辑 | 编辑源代码]

用于仅声音队列 

gst-launch-0.10 alsasrc ! audio/x-raw-int,rate=44100,channels=2,depth=16 ! queue ! audioconvert ! vorbisenc quality=0.8 ! oggmux ! tee name=tt \
! queue ! filesink location=artsbirthday-day3-$datenum.ogg tt. ! queue ! shout2send ip=x.x.x.x port=8000 password=mypass mount=mount.ogg

用于火线视频 

gst-launch-0.10 videomixer name=mix ! ffmpegcolorspace ! video/x-raw-yuv ! queue ! theoraenc quality=32 name=venc \
  oggmux name=mux ! tee name=tt ! queue ! filesink location=streamfile.ogg \
  tt. ! queue ! shout2send mount=/stream.ogg port=8000 password=xxx ip=xxx \
  alsasrc ! queue ! audioconvert ! vorbisenc name=aenc aenc. ! mux. \
  venc. ! mux. \
  dv1394src do-timestamp=true typefind=true ! queue ! dvdemux ! dvdec ! queue ! videorate ! videoscale ! ffmpegcolorspace ! video/x-raw-yuv, width=352, height=288,framerate=15/1 ! videobox left=0 top=0 border-alpha=0 ! mix.

替代方法

gst-launch-0.10 v4l2src device=/dev/video0 ! video/x-raw-yuv,width=320,height=240 ! queue ! videorate ! video/x-raw-yuv,framerate=25/2 \ 
! videoscale ! video/x-raw-yuv,width=320,height=240 ! ffmpegcolorspace ! tee name=tscreen ! queue ! autovideosink tscreen. ! queue \
! theoraenc quality=16 ! queue ! oggmux name=mux osssrc device=/dev/dsp ! audio/x-raw-int,rate=22050,channels=1 ! queue ! audioconvert z \
! vorbisenc quality=0.2 ! queue ! mux. mux. ! queue ! shout2send ip=giss.tv port=8000 password=PASS mount=YOURMOUNTPOINT.ogg

流媒体社区和资源

[编辑 | 编辑源代码]

GISS 是一个由志愿者运营的非商业性网络,使用自由软件创建,用于免费媒体。 http://giss.tv

华夏公益教科书