On-line (Internet) Audio/Video

Index

General





IPTV Video over Internet
media video resolution
480i, 576i, 720p, 1080i, 1080p (any)
codec
  • MPEG-2
  • MPEG4-AVC/H264
  • VC-1
(any)
container
  • MPEG-2 TS
  • (direct)
  • MP4
  • QuickTime
  • WMedia
  • RealNetworks
  • Flash Video
  • ...
service discovery

SD&S
transmission progressive download
  • HTTP
  • FTP
- x
streaming live
video MPEG-2 RFC 2250
H264 RFC 3984
VC-1 RFC 4425
audio AAC RFC 3640
AMR-WB+ RFC 4352

x
on-demand x x
network delivery unicast
content on-demand x
multicast
x x
p2p
- x
receiver STB
x -
PC
  • Media Centre
  • browser (RTSP)
  • media player (RTP/RTCP)

Streaming

RTP

  • Problemes / Problems
  • Implementations:
  • SDP
    • SDP documents and standards
    • SDP in gstreamer
    • RTP audio video profile (wp)



    • info


      v=0
      c=IN IP4 ${destination_address}

      m=video ${video_rtp_port} RTP/AVP ${rtp_video_payload_type}
      a=rtpmap:${rtp_video_payload_type} H264/90000

      a=fmtp:${rtp_video_payload_type} ...


      m=audio ${audio_rtp_port} RTP/AVP ${rtp_audio_payload_type}
      a=rtpmap:${rtp_audio_payload_type} ${audio_media_subtype}/${rate}/${channels}

      a=fmtp:${rtp_audio_payload_type} ...
      video
      H.264
      m=video 5100 RTP/AVP 96
      a=rtpmap:96 H264/90000
      a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAH6zZQFAFuhAAAAMAEAAAAwMA8YMZYA==,aOvssiw=; profile-level-id=64001F
      m=video 5100 RTP/AVP 96
      a=rtpmap:96 H264/90000
      a=fmtp:96 packetization-mode=1
      VP8
      m=video 5100 RTP/AVPF 96
      a=rtpmap:96 VP8/90000
      a=fmtp:96 max-fr=30; max-fs=3600;

      VP9
      m=video 5100 RTP/AVPF 96
      a=rtpmap:96 VP9/90000
      a=fmtp:96 max-fr=30; max-fs=3600


      audio AAC (48000Hz, 2 channels)
      m=audio 5102 RTP/AVP 97
      a=rtpmap:97 mpeg4-generic/48000/2


      opus (48000Hz, 2 channels) m=audio 5102 RTP/AVP 97
      a=rtpmap:97 opus/48000/2

      a=fmtp:97 sprop-stereo=1

    • SDP generats / Generated SDP:
      • when a single instance of ffmpeg generates several rtp streams, the option sdp-file contains all the streams. To split them, use the following script:
        • sdp_split.sh
          • #!/bin/bash

            common_sdp_path=$1

            common_sdp_dirname=$(dirname $common_sdp_path)
            common_sdp_basename=$(basename $common_sdp_path)
            common_sdp_name=${common_sdp_basename%.*}

            # remove all windows line feeds (^M)
            sed -i 's/\r//g' ${common_sdp_path}

            # get the number of video streams
            number_videos=$(grep "m=video" ${common_sdp_path} | wc -l)

            for (( video=1; video<=$number_videos; video++ ))
            do
                output_sdp_path="${common_sdp_dirname}/${common_sdp_name}_${video}.sdp"
                echo "${output_sdp_path}"

                awk -v selected_video=${video} '
            BEGIN {block=0; }
            #sub(/\r/,"", $0)
            /^v=/ {flag=1}
            /^s=/ {$0=$0 "_" selected_video}
            /^m=video/ {block++}
            flag {if (block==0 || block==selected_video) {print $0}}
            ' ${common_sdp_path} >${output_sdp_path}

            done
                   
            exit 0
      • RTP (vlc)
        • v=0
          o=- 15549874082820351558 15549874082820351558 IN IP4 localhost
          s=toto
          i=N/A
          c=IN IP4 234.1.2.3/255
          t=0 0
          a=tool:vlc 2.1.5
          a=recvonly
          a=type:broadcast
          a=charset:UTF-8

          m=audio 1234 RTP/AVP 96
          b=RR:0
          a=rtpmap:96 mpeg4-generic/48000/6
          a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=11b0; SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1;

          m=video 1236 RTP/AVP 96
          b=RR:0
          a=rtpmap:96 H264/90000
          a=fmtp:96 packetization-mode=1;profile-level-id=64001f;sprop-parameter-sets=Z2QAH6zZgFAEWhAAAAMAEAAAAwMA8YMZoA==,aOl4TLIs;
      • TS over RTP (vlc)
        • v=0
          o=- 15549875101994746492 15549875101994746492 IN IP4 localhost
          s=toto
          i=N/A
          c=IN IP4 234.1.2.3/255
          t=0 0
          a=tool:vlc 2.1.5
          a=recvonly
          a=type:broadcast
          a=charset:UTF-8

          m=video 5004 RTP/AVP 33
          b=RR:0
          a=rtpmap:33 MP2T/90000
      • ffmpeg -f sap sap://234.1.2.3?same_port=0 (default)
        • v=0
          o=- 0 0 IN IP4 127.0.0.1
          s=Sintel
          t=0 0
          a=tool:libavformat 55.12.100

          m=video 5004 RTP/AVP 96
          c=IN IP4 234.1.2.3/255
          b=AS:1615
          a=rtpmap:96 H264/90000
          a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAH6zZgFAEWhAAAAMAEAAAAwMA8YMZoA==,aOl4TLIs; profile-level-id=64001F

          m=audio 5006 RTP/AVP 97
          c=IN IP4 234.1.2.3/255
          b=AS:440
          a=rtpmap:97 MPEG4-GENERIC/48000/6
          a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=11B0
      • ffmpeg -f sap sap://234.1.2.3?same_port=1
        • v=0
          o=- 0 0 IN IP4 127.0.0.1
          s=Sintel
          t=0 0
          a=tool:libavformat 55.12.100

          m=video 5004 RTP/AVP 96
          c=IN IP4 234.1.2.3/255
          b=AS:1615
          a=rtpmap:96 H264/90000
          a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAH6zZgFAEWhAAAAMAEAAAAwMA8YMZoA==,aOl4TLIs; profile-level-id=64001F

          m=audio 5004 RTP/AVP 97
          c=IN IP4 234.1.2.3/255
          b=AS:440
          a=rtpmap:97 MPEG4-GENERIC/48000/6
          a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=11B0
  • Tests (only video)




    • ffplay
      gstreamer




      generated SDP
      sdp
      sdp
      caps




      ffplay -protocol_whitelist rtp,udp,file,http,https,tcp,tls -i test.sdp gst-launch-1.0 filesrc location=test.sdp ! sdpdemux name=demux demux. ! queue ! decodebin ! autovideosink gst-launch-1.0 udpsrc address=127.0.0.1 port=5004 ! "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile-level-id=(string)64001f,  payload=(int)96" ! queue ! rtph264depay ! decodebin ! autovideosink gst-launch-1.0 udpsrc address=127.0.0.1 port=5004 ! "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile-level-id=(string)64001f, sprop-parameter-sets=(string)\"...\", payload=(int)96" ! queue ! rtph264depay ! decodebin ! autovideosink
      ffmpeg
      test
      ffmpeg -re -f lavfi -i "testsrc=size=1280x720:rate=24" -c:v libx264 -b:v 700k -pix_fmt yuv420p -profile:v high -level:v 31 -f rtp rtp://127.0.0.1:5004 -sdp_file test.sdp
      SDP:
      v=0
      o=- 0 0 IN IP4 127.0.0.1
      s=No Name
      c=IN IP4 127.0.0.1
      t=0 0
      a=tool:libavformat 57.71.100
      m=video 5004 RTP/AVP 96
      b=AS:700
      a=rtpmap:96 H264/90000
      a=fmtp:96 packetization-mode=1
      correct
      correct
      There may be a timestamping problem, or this computer is too slow.
      • sprop from gstreamer test: correct
      • sprop from bbb: There may be a timestamping problem, or this computer is too slow.
      file
      ffmpeg -re -i bbb.mp4 -c:v copy -an -f rtp rtp://127.0.0.1:5004 -sdp_file test.sdp SDP:
      v=0
      o=- 0 0 IN IP4 127.0.0.1
      s=No Name
      c=IN IP4 127.0.0.1
      t=0 0
      a=tool:libavformat 57.71.100
      m=video 5004 RTP/AVP 96
      b=AS:698
      a=rtpmap:96 H264/90000
      a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAH6zZQFAFuhAAAAMAEAAAAwMA8YMZYA==,aOvssiw=; profile-level-id=64001F
      correct
      videodecoder gstvideodecoder.c:2775:gst_video_decoder_prepare_finish_frame:<avdec_h264-0> decreasing timestamp (0:00:33.104109030 < 0:00:33.126489781)
      does not start playing
      • sprop from gstreamer test: correct
      • sprop from bbb: There may be a timestamping problem, or this computer is too slow.
      gstreamer
      test
      gst-launch-1.0 -v videotestsrc ! video/x-raw,framerate=24/1,width=1280,height=720 ! videoconvert ! x264enc ! video/x-h264,stream-format=byte-stream,profile=high ! rtph264pay config-interval=10 pt=96 ! udpsink host=127.0.0.1 port=5004 v=0
      o=- 0 0 IN IP4 127.0.0.1
      s=No Name
      c=IN IP4 127.0.0.1
      t=0 0
      a=tool:libavformat 57.71.100
      m=video 5004 RTP/AVP 96
      b=AS:700
      a=rtpmap:96 H264/90000
      a=fmtp:96 packetization-mode=1
      correct
      correct
      correct
      • sprop from gstreamer test: correct
      • sprop from bbb: There may be a timestamping problem, or this computer is too slow.
      file
      gst-launch-1.0 -v filesrc location=bbb_timecode_1280x720_700k_stereo.mp4 ! qtdemux name=demux demux.video_0 ! rtph264pay config-interval=10 pt=96 ! udpsink host=127.0.0.1 port=5004 v=0
      o=- 0 0 IN IP4 127.0.0.1
      s=No Name
      c=IN IP4 127.0.0.1
      t=0 0
      a=tool:libavformat 57.71.100
      m=video 5004 RTP/AVP 96
      b=AS:700
      a=rtpmap:96 H264/90000
      a=fmtp:96 packetization-mode=1
      correct
      videodecoder gstvideodecoder.c:2775:gst_video_decoder_prepare_finish_frame:<avdec_h264-0> decreasing timestamp (0:00:09.945574289 < 0:00:09.953238304)
      There may be a timestamping problem, or this computer is too slow.
      • sprop from gstreamer test: correct (!)
      • sprop from bbb (gstreamer verbose): There may be a timestamping problem, or this computer is too slow.

RTMP

  • RTMP (wp)
  • Estàndard / Standard
    • Adobe’s Real Time Messaging Protocol (pdf) (Dec 21 2012)
    • What is Real-Time Messaging Protocol (RTMP)?
      • handshake


    • nginx-rtmp-module logs
      header
      Basic Header (BH) RTMP bheader
      • Chunk Type / fmt
      • Stream ID / csid
      Chunk Message Header RTMP mheader
      • message size / mlen
      • Timestamp Delta / time
      • Message Type
        • 0x01 Set Packet Size Message
        • 0x02 Abort
        • 0x03 Acknowledge
        • 0x04 Control Message (not AMF encoded)
        • 0x05 Server Bandwidth
        • 0x06 Client Bandwidth
        • 0x07 Virtual Control
        • 0x08 Audio Packet / audio (8)
        • 0x09 Video Packet / video (9)
        • 0x0F Data Extended / (15)
        • 0x10 Container Extended / (16)
        • 0x11 Command Extended (am AMF3 type command) / (17)
        • 0x12 Data / meta (18)
        • 0x13 Container / (19)
        • 0x14 Command (An AMF0 type command) / amf_cmd (20)
          • commands
            standard
            nginx-rtmp-module log


            [debug] AMF func [info]
            7.2.1 NetConnection
            7.2.1.1 connect
            'connect'
            connect: app='my_app' args='' flashver='' swf_url='' tc_url='rtmp://192.168.1.138/my_app' page_url='' acodecs=0 vcodecs=0 object_encoding=0, client: 192.168.1.135, server: 0.0.0.0:1935
            7.2.1.2 Call

            7.2.1.3 createStream 'createstream' createStream, client: 192.168.1.135, server: 0.0.0.0:1935
            7.2.2 NetStream 7.2.2.1 play

            7.2.2.2 play2

            7.2.2.3 deleteStream 'deletestream' (1) deleteStream, client: 192.168.1.135, server: 0.0.0.0:1935
            7.2.2.4 receiveAudio

            7.2.2.5 receiveVideo

            7.2.2.6 publish 'publish' publish: name='sintel' args='' type=live silent=0, client: 192.168.1.135, server: 0.0.0.0:1935

            '@setdataframe' [debug] codec: data frame: width=640 height=360 duration=0 frame_rate=24 video=H264 (7) audio=AAC (10)
            7.2.2.7 seek

            7.2.2.8 pause

          • (1) [debug] AMF func 'deletestream' is not present when connection is closed by drop_idle_publisher: [error] live: drop idle publisher, client: 192.168.1.135, server: 0.0.0.0:1935
        • 0x15 UDP / (21)
        • 0x16 Aggregate / (22)
        • 0x17 Present / (23)




  • Timestamps
  • Ús / Usage

HTTP Streaming

  • Common Media Application Format - CMAF (MPEG)
  • MPEG-DASH
  • HTTP Live Streaming - HLS
    • HTTP Live Streaming draft-pantos-http-live-streaming (IETF)
    • HTTP Live Streaming Overview (Apple iPhone development center)
    • codecs
      • video:
        • H.264/AVC baseline level 3.0
      • audio:
        • HE-AAC or AAC-LC up to 48 kHz, stereo audio
    • HTTP-Live-Video-Stream-Segmenter-and-Distributor (Carson McDonald)
    • iPhone HTTP Streaming with FFMpeg and an Open Source Segmenter
    • iPhone Windowed HTTP Live Streaming Using Amazon S3 and Cloudfront Proof of Concept
    • Streaming to the iPhone and iPod Touch (live, vod, multi-bitrate)
    • Streaming HowTo/Streaming for the iPhone (Videolan)
    • Galaxia HasDevTool
    • Best practices
      • Bit rate recommendations
        • "The first entry in the master playlist will be played at the initiation of a stream and is used as part of a test to determine which stream is most appropriate."
    • Xifratge / Encryption
    • Subtítols / Subtitles
      • convert srt to webvtt
        • ffmpeg -i en.srt -f webvtt en.webvtt
        • ffmpeg -i ca.srt -f webvtt ca.webvtt
      • index.m3u8
        • #EXTM3U
          #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",FORCED=NO,AUTOSELECT=YES,URI="en.ttml",LANGUAGE="en"
          #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Catalan",FORCED=NO,AUTOSELECT=YES,URI="ca.ttml",LANGUAGE="ca"
          #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=928000,RESOLUTION=640x360,SUBTITLES="subs"
          360p.m3u8
          #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2592000,RESOLUTION=1280x720,SUBTITLES="subs"
          720p.m3u8
          #EXT-X-ENDLIST
      • ca.ttml
        • #EXTM3U
          #EXT-X-VERSION:3
          #EXT-X-TARGETDURATION:3600
          #EXT-X-MEDIA-SEQUENCE:0
          #EXTINF:3600.0,
          ca.webvtt
          #EXT-X-ENDLIST
      • en.ttml
        • #EXTM3U
          #EXT-X-VERSION:3
          #EXT-X-TARGETDURATION:3600
          #EXT-X-MEDIA-SEQUENCE:0
          #EXTINF:3600.0,
          en.webvtt
          #EXT-X-ENDLIST
    • Tools
      • show cumulative time based on m3u8:
        • awk -F: '/^#EXTINF/ {gsub(/,/,"",$2); sum += $2; print $2 " " sum} /.ts/ {print $1} END {print sum}' monovariant.m3u8
      • hls_info.sh
        • #!/bin/bash

          m3u8_path=$1
          sum=0

          while read -r line
          do
              if [[ ${line} =~ ^"#EXTINF" ]]
              then
                  #echo ${line}
                  duration=$(echo ${line} | awk -F: '/^#EXTINF/ {gsub(/,/,"",$2); print $2}')
                  echo -n "---- start: ${sum} duration: ${duration} "
                  sum=$( echo "${sum}+${duration}" | bc -l)
                  echo -n "end: ${sum} "
              fi
             
              if [[ ${line} =~ "ts"$ ]]
              then
                  echo "<-- ${line}"
                  ffprobe -v 0 -show_entries frame=pkt_pts_time,pict_type -print_format compact=nk=1:p=0:s='\ ' -select_streams v:0 -i ${line}
              fi
             
          done < ${m3u8_path}

          echo "sum: ${sum}"

          exit 0
      • ts2m3u8.sh
        • #!/bin/bash

          function print_help_and_exit {
              cat <<EOF
          Usage: `basename $0` ts_dir ts_prefix ts_start ts_end

          Generate <ts_prefix>.gen.m3u8 file with reference to all ts files, in ts_dir, with file name:
          <ts_prefix><ts_start>.ts .. <ts_prefix><ts_stop>.ts

          Examples:
          - `basename $0` /tmp stream_low 4 55
          EOF
          }

          ts_dir=$1
          ts_prefix=$2
          ts_start=$3
          ts_end=$4

          function m3u8_header {
              # m3u8 header
              local m3u8_path=$1

              # TODO: calculate target duration from segments
             
              cat >${m3u8_path} <<EOF
          #EXTM3U
          #EXT-X-VERSION:3
          #EXT-X-TARGETDURATION:2
          #EXT-X-MEDIA-SEQUENCE:1
          EOF
          }

          function m3u8_footer {
              # m3u8 footer
              local m3u8_path=$1

              cat >>${m3u8_path} <<EOF
          #EXT-X-ENDLIST
          EOF
          }

          # output m3u8 file
          m3u8_path=${ts_prefix}.gen.m3u8

          # create m3u8 header
          m3u8_header ${m3u8_path}

          # get all ts files
          ts_list=$(eval ls -vx ${ts_dir}/${ts_prefix}{$ts_start..$ts_end}.ts)

          for ts_path in ${ts_list}
          do
              # get duration in seconds (with decimals)
              duration=$(ffprobe -i $ts_path -show_format -v quiet | sed -n 's/duration=//p')
              # keep only numbers and decimal point (discard N/A):
              duration=$(echo $duration | tr -d -c 0-9.)

              echo ${ts_path} ${duration}

              ts_basename=$(basename $ts_path)

              # put information into m3u8 output file
              echo "#EXTINF:${duration}," >>${m3u8_path}
              echo ${ts_basename} >>${m3u8_path}
          done

          # create m3u8 footer
          m3u8_footer ${m3u8_path}

          exit 0

Audio/Video

Descàrrega progressiva / Progressive download

Programari / Software

Projectes europeus / European projects

Conferències / Conferences

Música / Music

Platform Components Technology Where / affiliates
Pressplay
(Duet)
  • Sony
  • Vivendi Universal
  • EMI
  • Madacy, Navarre, OWIE, Razor & Tie, Roadrunner, Rounder
  • TVT Records
  • Zomba

Musicnet

  • Virgin
  • HMV
Tornado

Xarxes CDN / Content Delivery Networks (CDN)

SRT Secure Reliable Transport

  • SRT Alliance
  • Info
  • Programari / Software
    • Biblioteques / Libraries
      • Haivision / srt (GitHub)
        • needed to be installed before compiling gstreamer, ffmpeg, sls
        • dependencies
          • Mageia
            • urpmi cmake tcl
          • CentOS
            • sudo yum install cmake tcl
        • compilació / compilation
          • cd src
          • git clone https://github.com/Haivision/srt.git
          • cd srt
          • ./configure
          • make
          • sudo make install
          • NOTE: srt.pc (needed by: pkg-config --exists srt) will be installed to /usr/local/lib64/pkgconfig/ . You may need to update environment variable accordingly before configuring the compilation of other packages:
            • export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig/:/usr/local/lib/pkgconfig/
          • update ldconfig
            • echo '/usr/local/lib64' >/etc/ld.so.conf.d/local64.conf
            • sudo ldconfig
        • eines / tools

    • encoders servers players
      software
      hardware
      • ...


    • SRT Live Server
      • Docker
        • ravenium/srt-live-server (Docker Hub)
          • ravenium/srt-live-server (GitHub)
            • Clone repo:
              • cd src
                git clone https://github.com/ravenium/srt-live-server.git
                cd srt-live-server
            • build image:
              • docker build -t srt-live-server .
            • run container:
              • docker run -d -p 1935:1935/udp srt-live-server
              • verify that container is running:
                • docker container ls -a
      • compilació / compilation
        • cd src
        • git clone https://github.com/Edward-Wu/srt-live-server.git
        • cd srt-live-server
        • # path to find libsrt
          export
          PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig/:/usr/local/lib/pkgconfig/
        • make
      • config
      • ús / usage
        • cd src/srt-live-server/bin
        • ./sls -c ../sls.conf
        • port=8080
        • server_ip="192.168.1.141"
        • transmit with ffmpeg (caller):
          • ffmpeg -re -f lavfi -i testsrc=size=320x240:r=15 -f lavfi -i anoisesrc=a=0.2 -c:v libx264 -profile:v baseline -b:v 1M -pix_fmt yuv420p -c:a aac -b:a 16k -f mpegts "srt://${server_ip}:${port}?streamid=uplive.sls.com/live/test"
        • transmit an existing file with srt-live-client (bin/slc)
          • ./slc -r srt://${server_ip}:${port}?streamid=uplive.sls.com/live/test -i source_file.ts
        • transmit with obs (compiled wit srt-enabled ffmpeg):
          • Server: srt://192.168.1.141:8080?streamid=uplive.sls.com/live/test
          • Key: (empty)
        • receive with ffplay (caller):
          • ffplay -i "srt://${server_ip}:${port}?streamid=live.sls.com/live/test"
        • receive with srt-live-client (bin/slc) and generate a file:
          • ./slc -r srt://${server_ip}:${port}?streamid=live.sls.com/live/test -o destination_file.ts
    • modes (Medium: SRT)
      mode host port
      caller remote host remote port
      listener
      local listening port
      rendezvous other public host local and remote port

    • transmitter Tx receiver Rx

      gst-launch-1.0 -v videotestsrc ! "video/x-raw,height=360,width=640" ! videoconvert ! x264enc tune=zerolatency ! "video/x-h264,profile=baseline" ! mpegtsmux ! srtsink uri="srt://:8888/" gst-launch-1.0 -v srtsrc uri=srt://127.0.0.1:8888 ! decodebin ! autovideosink

      ffmpeg -re -f lavfi -i testsrc=size=320x240:r=15 -f lavfi -i sine=f=440:b=1 -c:v libx264 -profile:v baseline -b:v 1M -pix_fmt yuv420p -c:a aac -b:a 16k -f mpegts srt://:8888
      ffplay srt://127.0.0.1:8888
      • transmitter is a client
        (caller)
      • receiver is a server
        (listener; should be started first)
      • port=9998
      • receiver_ip="192.168.1.141"
      • ffmpeg ... -f mpegts "srt://${receiver_ip}:${port}?pkt_size=1316"
      • from test source:
        • ffmpeg -re -f lavfi -i testsrc=size=320x240:r=15 -f lavfi -i anoisesrc=a=0.2 -c:v libx264 -profile:v baseline -b:v 1M -pix_fmt yuv420p -c:a aac -b:a 16k -f mpegts "srt://${receiver_ip}:${port}?pkt_size=1316"
        • gst-launch-1.0 -v videotestsrc ! "video/x-raw,height=360,width=640" ! videoconvert ! x264enc tune=zerolatency ! "video/x-h264,profile=baseline" ! mpegtsmux ! srtsink uri="srt://${receiver_ip}:${port}/"
      • transmux from udp:
        • ffmpeg -fflags +genpts -listen 1 -re -i udp://239.0.0.1:1234?pkt_size=1316 -acodec copy -vcodec copy -strict -2 -y -f mpegts "srt://${receiver_ip}:${port}?pkt_size=1316"
      • port=9998
      • ffplay -i "srt://0.0.0.0:${port}?pkt_size=1316&mode=listener"
      • ffmpeg -re -i "srt://0.0.0.0:${port}?pkt_size=1316&mode=listener" ...
      • gst-launch-1.0 -v srtsrc uri="srt://:${port}" mode=listener ! decodebin ! autovideosink
      • transmux to udp:
        • ffmpeg -re -i "srt://0.0.0.0:${port}?pkt_size=1316&mode=listener" -vcodec copy -acodec copy -strict -2 -y -f mpegts udp://239.0.0.2:1234?pkt_size=1316
      • transmitter is a server
        (listener; should be started first)
      • receiver is a client
        (caller)
      • port=9998
      • ffmpeg ... -f mpegts "srt://0.0.0.0:${port}?pkt_size=1316&mode=listener"
      • from test source:
        • ffmpeg -re -f lavfi -i testsrc=size=320x240:r=15 -f lavfi -i anoisesrc=a=0.2 -c:v libx264 -profile:v baseline -b:v 1M -pix_fmt yuv420p -c:a aac -b:a 16k -f mpegts "srt://0.0.0.0:${port}?pkt_size=1316&mode=listener"
        • gst-launch-1.0 -v videotestsrc ! "video/x-raw,height=360,width=640" ! videoconvert ! x264enc tune=zerolatency ! "video/x-h264,profile=baseline" ! mpegtsmux ! srtsink uri="srt://${receiver_ip}:${port}/" mode=listener
      • transmux from udp (e.g. 239.0.0.1:1234):
        • ffmpeg -fflags +genpts -listen 1 -re -i udp://239.0.0.1:1234?pkt_size=1316 -acodec copy -vcodec copy -strict -2 -y -f mpegts "srt://0.0.0.0:${port}?pkt_size=1316&mode=listener"
      • port=9998
      • transmitter_ip="192.168.1.141"
      • ffplay -i "srt://${transmitter_ip}:${port}?pkt_size=1316"
      • ffmpeg -re -i "srt://${transmitter_ip}:${port}?pkt_size=1316" ...
      • gst-launch-1.0 -v srtsrc uri="srt://${transmitter_ip}:${port}" ! decodebin ! autovideosink
      • transmux to udp:
        • ffmpeg -re -i "srt://${transmitter_ip}:${port}?pkt_size=1316" -vcodec copy -acodec copy -strict -2 -y -f mpegts udp://239.0.0.2:1234?pkt_size=1316
      • rendezvous
      • port=9998
      • receiver_public_ip="192.168.1.141"
      • from test source:
        • ffmpeg -re -f lavfi -i testsrc=size=320x240:r=15 -f lavfi -i anoisesrc=a=0.2 -c:v libx264 -profile:v baseline -b:v 1M -pix_fmt yuv420p -c:a aac -b:a 16k -f mpegts "srt://${receiver_public_ip}:${port}?pkt_size=1316&mode=rendezvous"
      • port=9998
      • transmitter_public_ip="192.168.1.141"
      • ffplay -i "srt://${transmitter_public_ip}:${port}?pkt_size=1316&mode=rendezvous"
    • NOTE: use pkt_size=1316 to allocate 7 TS packets into one IP packet: 188*7=1316 < 1500
    • Problemes / Problems

RIST Reliable Internet Stream Transport

Gestió de drets / Rights Management (DRM)

Signatura / Signature

Xifratge / Encryption

  • Estaǹdards / Standards
  • Eines / Tools

    command (Bento4)
    standard
    encrypt
    decrypt
    DCF
    mp4dcfpackager --method CTR
    --content-id cid:toto
    --key 000102030405060708090a0b0c0d0e0f:00000000000000000000000000000000
    toto.mp4 toto.dcf
    mp4decrypt
    --key 1:00112233445566778899aabbccddeeff
    toto.dcf toto.odf
    mp4extract toto.odf
    PDCF
    mp4encrypt --method OMA-PDCF-CTR
    --key 1:000102030405060708090a0b0c0d0e0f:0000000000000000
    --key 2:000102030405060708090a0b0c0d0e0f:0000000000000000
    toto.mp4 toto.pdcf
    mp4decrypt
    --key 1:000102030405060708090a0b0c0d0e0f:0000000000000000
    --key 2:000102030405060708090a0b0c0d0e0f:0000000000000000
    toto.pdcf toto.mp4

Gestió de pagaments / Payment management

Formats (*)

Continguts / Contents

Seqüències / Sequencies

P2P (Peer to peer)

Reproductors MP3 Players



dim LCD ràdio recording bluetooth video doc preu





dim res colors FM RDS FM line mic


1GB
(Z)
2GB (Q) 4GB
(A)










live prog







Samsung YP-F2R 28 52 15


x x -
-






YP-T7 37 62 14
96x96 65K - - -
-
-




YP-T7F 37 62 14 1,2" 96x96 262K x x x x x
- MPEG4
135, 138+9+iva

YP-T8 44 83 15 1,8" 128x160 262K x - x


-


169
YP-T9J
(unoff)
43 83 11 1,8" 172x220 262K x x x - - x x SVI: XVID 208x176 15 fps pdf 169+9+iva 155+9,9ii
189+9+iva
169+22ii
239+9+iva
199+22ii
YP-Z5F 42 90 12 1,8" 128x160
x x x
-

MPEG4
118 159, 149
F: FM
X: 512MB
Z: 1GB
Q: 2GB
A: 4GB

http://www.francescpinyol.cat/online_audio_video.html
Darrera modificació: 23 de febrer de 2024 / Last update: 23rd February 2024

Cap a casa / Back home.