Recherche avancée

Médias (1)

Mot : - Tags -/MediaSPIP

Autres articles (4)

  • Supporting all media types

    13 avril 2011, par

    Unlike most software and media-sharing platforms, MediaSPIP aims to manage as many different media types as possible. The following are just a few examples from an ever-expanding list of supported formats : images : png, gif, jpg, bmp and more audio : MP3, Ogg, Wav and more video : AVI, MP4, OGV, mpg, mov, wmv and more text, code and other data : OpenOffice, Microsoft Office (Word, PowerPoint, Excel), web (html, CSS), LaTeX, Google Earth and (...)

  • Keeping control of your media in your hands

    13 avril 2011, par

    The vocabulary used on this site and around MediaSPIP in general, aims to avoid reference to Web 2.0 and the companies that profit from media-sharing.
    While using MediaSPIP, you are invited to avoid using words like "Brand", "Cloud" and "Market".
    MediaSPIP is designed to facilitate the sharing of creative media online, while allowing authors to retain complete control of their work.
    MediaSPIP aims to be accessible to as many people as possible and development is based on expanding the (...)

  • Le plugin : Podcasts.

    14 juillet 2010, par

    Le problème du podcasting est à nouveau un problème révélateur de la normalisation des transports de données sur Internet.
    Deux formats intéressants existent : Celui développé par Apple, très axé sur l’utilisation d’iTunes dont la SPEC est ici ; Le format "Media RSS Module" qui est plus "libre" notamment soutenu par Yahoo et le logiciel Miro ;
    Types de fichiers supportés dans les flux
    Le format d’Apple n’autorise que les formats suivants dans ses flux : .mp3 audio/mpeg .m4a audio/x-m4a .mp4 (...)

Sur d’autres sites (3524)

  • Making Your First-Party Data Work for You and Your Customers

    11 mars, par Alex Carmona

    At last count, 162 countries had enacted data privacy policies of one kind or another. These laws or regulations, without exception, intend to eliminate the use of third-party data. That puts marketing under pressure because third-party data has been the foundation of online marketing efforts since the dawn of the Internet.

    Marketers need to future-proof their operations by switching to first-party data. This will require considerable adjustment to systems and processes, but the reward will be effective marketing campaigns that satisfy privacy compliance requirements and bring the business closer to its customers.

    To do that, you’ll need a coherent first-party data strategy. That’s what this article is all about. We’ll explain the different types of personal data and discuss how to use them in marketing without compromising or breaching data privacy regulations. We’ll also discuss how to build that strategy in your business. 

    So, let’s dive in.

    The different data types

    There are four distinct types of personal data used in marketing, each subject to different data privacy regulations.

    Before getting into the different types, it’s essential to understand that all four may comprise one or more of the following :

    Identifying dataName, email address, phone number, etc.
    Behavioural dataWebsite activity, app usage, wishlist content, purchase history, etc.
    Transactional dataOrders, payments, subscription details, etc.
    Account dataCommunication preferences, product interests, wish lists, etc.
    Demographic dataAge, gender, income level, education, etc.
    Geographic DataLocation-based information, such as zip codes or regional preferences.
    Psychographic DataInterests, hobbies and lifestyle preferences.

    First-party data

    When businesses communicate directly with customers, any data they exchange is first-party. It doesn’t matter how the interaction occurs : on the telephone, a website, a chat session, or even in person.

    Of course, the parties involved aren’t necessarily individuals. They may be companies, but people within those businesses will probably share at least some of the data with colleagues. That’s fine, so long as the data : 

    • Remains confidential between the original two parties involved, and 
    • It is handled and stored following applicable data privacy regulations.

    The core characteristic of first-party data is that it’s collected directly from customer interactions. This makes it reliable, accurate and inherently compliant with privacy regulations — assuming the collecting party complies with data privacy laws.

    A great example of first-party data use is in banking. Data collected from customer interactions is used to provide personalised services, detect fraud, assess credit risk and improve customer retention.

    Zero-party data

    There’s also a subset of first-party data, sometimes called zero-party data. It’s what users intentionally and proactively share with a business. It can be preferences, intentions, personal information, survey responses, support tickets, etc.

    What makes it different is that the collection of this data depends heavily on the user’s trust. Transparency is a critical factor, too ; visitors expect to be informed about how you’ll use their data. Consumers also have the right to withdraw permission to use all or some of their information at any time.

    Diagram showing how a first-party data strategy is built on trust and transparency

    Second-party data

    This data is acquired from a separate organisation that collects it firsthand. Second-party data is someone else’s first-party data that’s later shared with or sold to other businesses. The key here is that whoever owns that data must give explicit consent and be informed of who businesses share their data with.

    A good example is the cooperation between hotel chains, car rental companies, and airlines. They share joint customers’ flight data, hotel reservations, and car rental bookings, much like travel agents did before the internet undermined that business model.

    Third-party data

    This type of data is the arch-enemy of lawmakers and regulators trying to protect the personal data of citizens and residents in their country. It’s information collected by entities that have no direct relationship with the individuals whose data it is.

    Third-party data is usually gathered, aggregated, and sold by data brokers or companies, often by using third-party cookies on popular websites. It’s an entire business model — these third-party brokers sell data for marketing, analytics, or research purposes. 

    Most of the time, third-party data subjects are unaware that their data has been gathered and sold. Hence the need for strong data privacy regulations.

    Benefits of a first-party data strategy

    First-party data is reliable, accurate, and ethically sourced. It’s an essential part of any modern digital marketing strategy.

    More personalised experiences

    The most important application of first-party data is customising and personalising customers’ interactions based on real behaviours and preferences. Personalised experiences aren’t restricted to websites and can extend to all customer communication.

    The result is company communications and marketing messages are far more relevant to customers. It allows businesses to engage more meaningfully with them, building trust and strengthening customer relationships. Inevitably, this also results in stronger customer loyalty and better customer retention.

    Greater understanding of customers

    Because first-party data is more accurate and reliable, it can be used to derive valuable insights into customer needs and wants. When all the disparate first-party data points are centralised and organised, it’s possible to uncover trends and patterns in customer behaviour that might not be apparent using other data.

    This helps businesses predict and respond to customer needs. It also allows marketing teams to be more deliberate when segmenting customers and prospects into like-minded groups. The data can also be used to create more precise personas for future campaigns or reveal how likely a customer would be to purchase in response to a campaign.

    Build trust with customers

    First-party data is unique to a business and originates from interactions with customers. It’s also data collected with consent and is “owned” by the company — if you can ever own someone else’s data. If treated like the precious resource, it can help businesses build trust with customers.

    However, developing that trust requires a transparent, step-by-step approach. This gradually strengthens relationships to the point where customers are more comfortable sharing the information they’re asked for.

    However, while building trust is a long and sometimes arduous process, it can be lost in an instant. That’s why first-party data must be protected like the Crown Jewels.

    Image showing the five key elements of a first-party data strategy

    Components of a first-party data strategy

    Security is essential to any first-party data strategy, and for good reason. As Gartner puts it, a business must find the optimal balance between business outcomes and data risk mitigation. Once security is baked in, attention can turn to the different aspects of the strategy.

    Data collection

    There are many ways to collect first-party data ethically, within the law and while complying with data privacy regulations, such as Europe’s General Data Protection Regulation (GDPR). Potential sources include :

    Website activityforms and surveys, behavioural tracking, cookies, tracking pixels and chatbots
    Mobile app interactionsin-app analytics, push notifications and in-app forms
    Email marketingnewsletter sign-ups, email engagement tracking, promotions, polls and surveys 
    Eventsregistrations, post-event surveys and virtual event analytics
    Social media interactionpolls and surveys, direct messages and social media analytics
    Previous transactionspurchase history, loyalty programmes and e-receipts 
    Customer service call centre data, live chat, chatbots and feedback forms
    In-person interactions in-store purchases, customer feedback and Wi-Fi sign-ins
    Gated contentwhitepapers, ebooks, podcasts, webinars and video downloads
    Interactive contentquizzes, assessments, calculators and free tools
    CRM platformscustomer profiles and sales data
    Consent managementprivacy policies, consent forms, preference setting

    Consent management

    It may be the final item on the list above, but it’s also a key requirement of many data privacy laws and regulations. For example, the GDPR is very clear about consent : “Processing personal data is generally prohibited, unless it is expressly allowed by law, or the data subject has consented to the processing.”

    For that reason, your first-party data strategy must incorporate various transparent consent mechanisms, such as cookie banners and opt-in forms. Crucially, you must provide customers with a mechanism to manage their preferences and revoke that consent easily if they wish to.

    Data management

    Effective first-party data management, mainly its security and storage, is critical. Most data privacy regimes restrict the transfer of personal data to other jurisdictions and even prohibit it in some instances. Many even specify where residents’ data must be stored.

    Consider this cautionary tale : The single biggest fine levied for data privacy infringement so far was €1.2 billion. The Irish Data Protection Commission imposed a massive fine on Meta for transferring EU users’ data to the US without adequate data protection mechanisms.

    Data security is critical. If first-party data is compromised, it becomes third-party data, and any customer trust developed with the business will evaporate. To add insult to injury, data regulators could come knocking. That’s why the trend is to use encryption and anonymisation techniques alongside standard access controls.

    Once security is assured, the focus is on data management. Many businesses use a Customer Data Platform. This software gathers, combines and manages data from many sources to create a complete and central customer profile. Modern CRM systems can also do that job. AI tools could help find patterns and study them. But the most important thing is to keep databases clean and well-organised to make it easier to use and avoid data silos.

    Data activation

    Once first-party data has been collected and analysed, it needs to be activated, which means a business needs to use it for the intended purpose. This is the implementation phase where a well-constructed first-party strategy pays off. 

    The activation stage is where businesses use the intelligence they gather to :

    • Personalise website and app experiences
    • Adapt marketing campaigns
    • Improve conversion rates
    • Match stated preferences
    • Cater to observed behaviours
    • Customise recommendations based on purchase history
    • Create segmented email campaigns
    • Improve retargeting efforts
    • Develop more impactful content

    Measurement and optimisation

    Because first-party data is collected directly from customers or prospects, it’s far more relevant, reliable, and specific. Your analytics and campaign tracking will be more accurate. This gives you direct and actionable insights into your audience’s behaviour, empowering you to optimise your strategies and achieve better results.

    The same goes for your collection and activation efforts. An advanced web analytics platform like Matomo lets you identify key user behaviour and optimise your tracking. Heatmaps, marketing attribution tools, user behaviour analytics and custom reports allow you to segment audiences for better traction (and collect even more first-party data).

    Image showing the five steps to developing a first-party data strategy

    How to build a first-party data strategy

    There are five important and sequential steps to building a first-party data strategy. But this isn’t a one-time process. It must be revisited regularly as operating and regulatory environments change. There are five steps : 

    1. Audit existing data

    Chances are that customers already freely provide a lot of first-party data in the normal course of business. The first step is to locate this data, and the easiest way to do that is by mapping the customer journey. This identifies all the touchpoints where first-party data might be found.

    1. Define objectives

    Then, it’s time to step back and figure out the goals of the first-party data strategy. Consider what you’re trying to achieve. For example :

    • Reduce churn 
    • Expand an existing loyalty programme
    • Unload excess inventory
    • Improve customer experiences

    Whatever the objectives are, they should be clear and measurable.

    1. Implement tools and technology

    The first two steps point to data gaps. Now, the focus turns to ethical web analytics with a tool like Matomo. 

    To further comply with data privacy regulations, it may also be appropriate to implement a Consent Management Platform (CMP) to help manage preferences and consent choices.

    1. Build trust with transparency

    With the tools in place, it’s time to engage customers. To build trust, keep them informed about how their data is used and remind them of their right to withdraw their consent. 

    Transparency is crucial in such engagement, as outlined in the 7 GDPR principles.

    1. Continuously improve

    Rinse and repeat. The one constant in business and life is change. As things change, they expose weaknesses or flaws in the logic behind systems and processes. That’s why a first-party data strategy needs to be continually reviewed, updated, and revised. It must adapt to changing trends, markets, regulations, etc. 

    Tools that can help

    Looking back at the different types of data, it’s clear that some are harder and more bothersome to get than others. But capturing behaviours and interactions can be easy — especially if you use tools that follow data privacy rules.

    But here’s a tip. Google Analytics 4 isn’t compliant by default, especially not with Europe’s GDPR. It may also struggle to comply with some of the newer data privacy regulations planned by different US states and other countries.

    Matomo Analytics is compliant with the GDPR and many other data privacy regulations worldwide. Because it’s open source, it can be integrated with any consent manager.

    Get started today by trying Matomo for free for 21 days,
    no credit card required.

  • Muxing Android MediaCodec encoded H264 packets into RTMP

    31 décembre 2015, par Vadym

    I am coming from a thread Encoding H.264 from camera with Android MediaCodec. My setup is very similar. However, I attempt to write mux the encoded frames and with javacv and broadcast them via rtmp.

    RtmpClient.java

    ...
    private volatile BlockingQueue mFrameQueue = new LinkedBlockingQueue(MAXIMUM_VIDEO_FRAME_BACKLOG);
    ...
    private void startStream() throws FrameRecorder.Exception, IOException {
       if (TextUtils.isEmpty(mDestination)) {
           throw new IllegalStateException("Cannot start RtmpClient without destination");
       }

       if (mCamera == null) {
           throw new IllegalStateException("Cannot start RtmpClient without camera.");
       }

       Camera.Parameters cameraParams = mCamera.getParameters();

       mRecorder = new FFmpegFrameRecorder(
               mDestination,
               mVideoQuality.resX,
               mVideoQuality.resY,
               (mAudioQuality.channelType.equals(AudioQuality.CHANNEL_TYPE_STEREO) ? 2 : 1));

       mRecorder.setFormat("flv");

       mRecorder.setFrameRate(mVideoQuality.frameRate);
       mRecorder.setVideoBitrate(mVideoQuality.bitRate);
       mRecorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);

       mRecorder.setSampleRate(mAudioQuality.samplingRate);
       mRecorder.setAudioBitrate(mAudioQuality.bitRate);
       mRecorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);

       mVideoStream = new VideoStream(mRecorder, mVideoQuality, mFrameQueue, mCamera);
       mAudioStream = new AudioStream(mRecorder, mAudioQuality);

       mRecorder.start();

       // Setup a bufferred preview callback
       setupCameraCallback(mCamera, mRtmpClient, DEFAULT_PREVIEW_CALLBACK_BUFFERS,
               mVideoQuality.resX * mVideoQuality.resY * ImageFormat.getBitsPerPixel(
                       cameraParams.getPreviewFormat())/8);

       try {
           mVideoStream.start();
           mAudioStream.start();
       }
       catch(Exception e) {
           e.printStackTrace();
           stopStream();
       }
    }
    ...
    @Override
    public void onPreviewFrame(byte[] data, Camera camera) {
       boolean frameQueued = false;

       if (mRecorder == null || data == null) {
           return;
       }

       frameQueued = mFrameQueue.offer(data);

       // return the buffer to be reused - done in videostream
       //camera.addCallbackBuffer(data);
    }
    ...

    VideoStream.java

    ...
    @Override
    public void run() {
       try {
           mMediaCodec = MediaCodec.createEncoderByType("video/avc");
           MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", mVideoQuality.resX, mVideoQuality.resY);
           mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, mVideoQuality.bitRate);
           mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, mVideoQuality.frameRate);
           mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420SemiPlanar);
           mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 1);
           mMediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
           mMediaCodec.start();
       }
       catch(IOException e) {
           e.printStackTrace();
       }

       long startTimestamp = System.currentTimeMillis();
       long frameTimestamp = 0;
       byte[] rawFrame = null;

       try {
           while (!Thread.interrupted()) {
               rawFrame = mFrameQueue.take();

               frameTimestamp = 1000 * (System.currentTimeMillis() - startTimestamp);

               encodeFrame(rawFrame, frameTimestamp);

               // return the buffer to be reused
               mCamera.addCallbackBuffer(rawFrame);
           }
       }
       catch (InterruptedException ignore) {
           // ignore interrup while waiting
       }

       // Clean up video stream allocations
       try {
           mMediaCodec.stop();
           mMediaCodec.release();
           mOutputStream.flush();
           mOutputStream.close();
       } catch (Exception e){
           e.printStackTrace();
       }
    }
    ...
    private void encodeFrame(byte[] input, long timestamp) {
       try {
           ByteBuffer[] inputBuffers = mMediaCodec.getInputBuffers();
           ByteBuffer[] outputBuffers = mMediaCodec.getOutputBuffers();

           int inputBufferIndex = mMediaCodec.dequeueInputBuffer(0);

           if (inputBufferIndex >= 0) {
               ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
               inputBuffer.clear();
               inputBuffer.put(input);
               mMediaCodec.queueInputBuffer(inputBufferIndex, 0, input.length, timestamp, 0);
           }

           MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();

           int outputBufferIndex = mMediaCodec.dequeueOutputBuffer(bufferInfo, 0);

           if (outputBufferIndex >= 0) {
               while (outputBufferIndex >= 0) {
                   ByteBuffer outputBuffer = outputBuffers[outputBufferIndex];

                   // Should this be a direct byte buffer?
                   byte[] outData = new byte[bufferInfo.size - bufferInfo.offset];
                   outputBuffer.get(outData);

                   mFrameRecorder.record(outData, bufferInfo.offset, outData.length, timestamp);

                   mMediaCodec.releaseOutputBuffer(outputBufferIndex, false);
                   outputBufferIndex = mMediaCodec.dequeueOutputBuffer(bufferInfo, 0);
               }
           }
           else if (outputBufferIndex == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) {
               outputBuffers = mMediaCodec.getOutputBuffers();
           } else if (outputBufferIndex == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
               // ignore for now
           }
       } catch (Throwable t) {
           t.printStackTrace();
       }

    }
    ...

    FFmpegFrameRecorder.java

    ...
    // Hackish codec copy frame recording function
    public boolean record(byte[] encodedData, int offset, int length, long frameCount) throws Exception {
       int ret;

       if (encodedData == null) {
           return false;
       }

       av_init_packet(video_pkt);

       // this is why i wondered whether I should get outputbuffer data into direct byte buffer
       video_outbuf.put(encodedData, 0, encodedData.length);

       video_pkt.data(video_outbuf);
       video_pkt.size(video_outbuf_size);

       video_pkt.pts(frameCount);
       video_pkt.dts(frameCount);

       video_pkt.stream_index(video_st.index());

       synchronized (oc) {
           /* write the compressed frame in the media file */
           if (interleaved && audio_st != null) {
               if ((ret = av_interleaved_write_frame(oc, video_pkt)) < 0) {
                   throw new Exception("av_interleaved_write_frame() error " + ret + " while writing interleaved video frame.");
               }
           } else {
               if ((ret = av_write_frame(oc, video_pkt)) < 0) {
                   throw new Exception("av_write_frame() error " + ret + " while writing video frame.");
               }
           }
       }
       return (video_pkt.flags() & AV_PKT_FLAG_KEY) == 1;
    }
    ...

    When I try to stream the video and run ffprobe on it, I get the following output :

    ffprobe version 2.5.3 Copyright (c) 2007-2015 the FFmpeg developers
     built on Jan 19 2015 12:56:57 with gcc 4.1.2 (GCC) 20080704 (Red Hat 4.1.2-55)
     configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --enable-bzlib --disable-crystalhd --enable-libass --enable-libdc1394 --enable-libfaac --enable-nonfree --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopencv --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --enable-libcaca --shlibdir=/usr/lib64 --enable-runtime-cpudetect
     libavutil      54. 15.100 / 54. 15.100
     libavcodec     56. 13.100 / 56. 13.100
     libavformat    56. 15.102 / 56. 15.102
     libavdevice    56.  3.100 / 56.  3.100
     libavfilter     5.  2.103 /  5.  2.103
     libavresample   2.  1.  0 /  2.  1.  0
     libswscale      3.  1.101 /  3.  1.101
     libswresample   1.  1.100 /  1.  1.100
     libpostproc    53.  3.100 / 53.  3.100
    Metadata:
     Server                NGINX RTMP (github.com/arut/nginx-rtmp-module)
     width                 320.00
     height                240.00
     displayWidth          320.00
     displayHeight         240.00
     duration              0.00
     framerate             0.00
     fps                   0.00
     videodatarate         261.00
     videocodecid          7.00
     audiodatarate         62.00
     audiocodecid          10.00
     profile
     level
    [live_flv @ 0x1edb0820] Could not find codec parameters for stream 0 (Video: none, none, 267 kb/s): unknown codec
    Consider increasing the value for the 'analyzeduration' and 'probesize' options
    Input #0, live_flv, from 'rtmp://<server>/input/<stream>':
     Metadata:
       Server          : NGINX RTMP (github.com/arut/nginx-rtmp-module)
       displayWidth    : 320
       displayHeight   : 240
       fps             : 0
       profile         :
       level           :
     Duration: 00:00:00.00, start: 16.768000, bitrate: N/A
       Stream #0:0: Video: none, none, 267 kb/s, 1k tbr, 1k tbn, 1k tbc
       Stream #0:1: Audio: aac (LC), 16000 Hz, mono, fltp, 63 kb/s
    Unsupported codec with id 0 for input stream 0
    </stream></server>

    I am not, by any means, an expert in H264 or video encoding. I know that the encoded frames that come out from MediaCodec contain SPS NAL, PPS NAL, and frame NAL units. I’ve also written the MediaCodec output into a file and was able to play it back (I did have to specify the format and framerate as otherwise it would play too fast).

    My assumption is that things should work (see how little I know :)). Knowing that SPS and PPS are written out, decoder should know enough. Yet, ffprobe fails to recognize codec, fps, and other video information. Do I need to pass packet flag information to FFmpegFrameRecorder.java:record() function ? Or should I use direct buffer ? Any suggestion will be appreciated ! I should figure things out with a hint.

    PS : I know that some codecs use Planar and other SemiPlanar color formats. That distinction will come later if I get past this. Also, I didn’t go the Surface to MediaCodec way because I need to support API 17 and it requires more changes than this route, which I think helps me understand the more basic flow. Agan, I appreciate any suggestions. Please let me know if something needs to be clarified.

    Update #1

    So having done more testing, I see that my encoder outputs the following frames :

    000000016742800DDA0507E806D0A1350000000168CE06E2
    0000000165B840A6F1E7F0EA24000AE73BEB5F51CC7000233A84240...
    0000000141E2031364E387FD4F9BB3D67F51CC7000279B9F9CFE811...
    0000000141E40304423FFFFF0B7867F89FAFFFFFFFFFFCBE8EF25E6...
    0000000141E602899A3512EF8AEAD1379F0650CC3F905131504F839...
    ...

    The very first frame contains SPS and PPS. From what I was able to see, these are transmitted only once. The rest are NAL types 1 and 5. So, my assumption is that, for ffprobe to see stream info not only when the stream starts, I should capture SPS and PPS frames and re-transmit them myself periodically, after a certain number of frames, or perhaps before every I-frame. What do you think ?

    Update #2

    Unable to validate that I’m writing frames successfully. After having tried to read back the written packet, I cannot validate written bytes. As strange, on successful write of IPL image and streaming, I also cannot print out bytes of encoded packet after avcodec_encode_video2. Hit the official dead end.

  • Cannot play local RTP stream

    24 janvier 2020, par gdogg371

    I have been struggling along with this issue now for a while, but am making good progress. I now have a 4k transport stream running using the below command line arguments for VLC :

    vlc --ffmpeg-hw --avcodec-hw=any dshow:// :dshow-vdev="Video (00 Pro Capture HDMI 4K+)" :dshow-adev="Audio (2- 00 Pro Capture HDMI 4K+)" :dshow-threads=8 :dshow-aspect-ratio=16\:9 :dshow-size="3840x2160" :dshow-pixel_format=yuv444p16le :dshow-tune=film :dshow-preset=lossless :dshow-profile=main10 show-vcodec=hevc_nvenc :dshow-fps=50 :dshow-crf=0 :dshow-acodec=mp4a :dshow-stereo-mode=5 :dshow-force-surround-sound=0 :dshow-ab=128 :dshow-samplerate=44100 :no-dshow-config :live-caching=3000 --sout "#transcode{venc=ffmpeg,vcodec=mpgv,threads=8,aspect=16:9,width=3840,height=2160,fps=50,acodec=a52,ab=1500,channels=6,samplerate=48000,soverlay}:rtp{dst=239.255.0.1,port=5004,mux=ts}"

    I can access the rtp stream on the same PC as I am running the stream from with the below :

    vlc -vvv rtp://@239.255.0.1:5004

    However, if I try the same commands on a different computer, connected via Ethernet to the same network, the client VLC session just hangs. I have included the log below with the verbosity set to debug. Can anyone spot anything in here suggesting why the stream won’t play ?

    -- logger module started --
    main debug: VLC media player - 3.0.8 Vetinari
    main debug: Copyright © 1996-2019 the VideoLAN team
    main debug: revision 3.0.8-0-gf350b6b5a7
    main debug: configured with ../extras/package/win32/../../../configure  '--enable-update-check' '--enable-lua' '--enable-faad' '--enable-flac' '--enable-theora' '--enable-avcodec' '--enable-merge-ffmpeg' '--enable-dca' '--enable-mpc' '--enable-libass' '--enable-schroedinger' '--enable-realrtsp' '--enable-live555' '--enable-dvdread' '--enable-shout' '--enable-goom' '--enable-caca' '--enable-qt' '--enable-skins2' '--enable-sse' '--enable-mmx' '--enable-libcddb' '--enable-zvbi' '--disable-telx' '--enable-nls' '--host=x86_64-w64-mingw32' '--with-breakpad=https://win.crashes.videolan.org' 'host_alias=x86_64-w64-mingw32' 'PKG_CONFIG_LIBDIR=/home/jenkins/workspace/vlc-release/windows/vlc-release-win32-x64/contrib/x86_64-w64-mingw32/lib/pkgconfig'
    main debug: using multimedia timers as clock source
    main debug:  min period: 1 ms, max period: 1000000 ms
    main debug: searching plug-in modules
    main debug: loading plugins cache file D:\VLC\plugins\plugins.dat
    main debug: recursively browsing `D:\VLC\plugins'
    main error: stale plugins cache: modified D:\VLC\plugins\access\libaccess_concat_plugin.dll
    main error: stale plugins cache: modified D:\VLC\plugins\access\libaccess_imem_plugin.dll
    ....
    ....
    ....
    main error: stale plugins cache: modified D:\VLC\plugins\visualization\libgoom_plugin.dll
    main error: stale plugins cache: modified D:\VLC\plugins\visualization\libprojectm_plugin.dll
    main error: stale plugins cache: modified D:\VLC\plugins\visualization\libvisual_plugin.dll
    main debug: plug-ins loaded: 494 modules
    main debug: opening config file (C:\Users\cg371\AppData\Roaming\vlc\vlcrc)
    main debug: looking for logger module matching "any": 2 candidates
    file debug: opening logfile `D:\VLC\Log.txt'
    main debug: using logger module "file"
    main debug: translation test: code is "en_GB"
    main debug: looking for keystore module matching "memory": 3 candidates
    main debug: using keystore module "memory"
    main debug: CPU has capabilities MMX MMXEXT SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 FPU
    main debug: Creating an input for 'Media Library'
    main debug: Input is a meta file: disabling unneeded options
    main debug: using timeshift granularity of 50 MiB
    main debug: using timeshift path: C:\Users\cg371\AppData\Local\Temp
    main debug: `file/directory:///C:/Users/cg371/AppData/Roaming/vlc/ml.xspf' gives access `file' demux `directory' path `/C:/Users/cg371/AppData/Roaming/vlc/ml.xspf'
    main debug: creating demux: access='file' demux='directory' location='/C:/Users/cg371/AppData/Roaming/vlc/ml.xspf' file='C:\Users\cg371\AppData\Roaming\vlc\ml.xspf'
    main debug: looking for access_demux module matching "file": 15 candidates
    main debug: no access_demux modules matched
    main debug: creating access: file:///C:/Users/cg371/AppData/Roaming/vlc/ml.xspf
    main debug:  (path: C:\Users\cg371\AppData\Roaming\vlc\ml.xspf)
    main debug: looking for access module matching "file": 26 candidates
    main debug: using access module "filesystem"
    main debug: looking for stream_filter module matching "prefetch,cache_read": 24 candidates
    cache_read debug: Using stream method for AStream*
    cache_read debug: starting pre-buffering
    cache_read debug: received first data after 1 ms
    cache_read debug: pre-buffering done 304 bytes in 0s - 296 KiB/s
    main debug: using stream_filter module "cache_read"
    main debug: looking for stream_filter module matching "any": 24 candidates
    playlist debug: using XSPF playlist reader
    main debug: using stream_filter module "playlist"
    main debug: stream filter added to 00000266f6927700
    main debug: looking for stream_filter module matching "any": 24 candidates
    main debug: no stream_filter modules matched
    main debug: looking for stream_directory module matching "any": 1 candidates
    main debug: no stream_directory modules matched
    main debug: attachment of directory-extractor failed for file:///C:/Users/cg371/AppData/Roaming/vlc/ml.xspf
    main debug: looking for stream_filter module matching "record": 24 candidates
    main debug: using stream_filter module "record"
    main debug: creating demux: access='file' demux='directory' location='/C:/Users/cg371/AppData/Roaming/vlc/ml.xspf' file='C:\Users\cg371\AppData\Roaming\vlc\ml.xspf'
    main debug: looking for demux module matching "directory": 55 candidates
    main debug: using demux module "directory"
    main debug: looking for meta reader module matching "any": 2 candidates
    lua debug: Trying Lua scripts in C:\Users\cg371\AppData\Roaming\vlc\lua\meta\reader
    lua debug: Trying Lua scripts in D:\VLC\lua\meta\reader
    lua debug: Trying Lua playlist script D:\VLC\lua\meta\reader\filename.luac
    main debug: no meta reader modules matched
    main debug: `file/directory:///C:/Users/cg371/AppData/Roaming/vlc/ml.xspf' successfully opened
    main debug: looking for xml reader module matching "any": 1 candidates
    main debug: using xml reader module "xml"
    main debug: EOF reached
    main debug: removing module "directory"
    main debug: removing module "record"
    main debug: removing module "playlist"
    main debug: removing module "cache_read"
    main debug: removing module "filesystem"
    main debug: creating audio output
    main debug: looking for audio output module matching "any": 6 candidates
    mmdevice debug: using default device
    mmdevice debug: display name changed: VLC media player (LibVLC 3.0.8)
    mmdevice debug: version 2 session control unavailable
    mmdevice debug: volume from -65.250000 dB to +0.000000 dB with 0.031250 dB increments
    main debug: using audio output module "mmdevice"
    main debug: keeping audio output
    main debug: looking for interface module matching "hotkeys,none": 16 candidates
    main debug: using interface module "hotkeys"
    main debug: looking for interface module matching "globalhotkeys,none": 16 candidates
    main debug: using interface module "win32"
    main: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
    main debug: looking for interface module matching "any": 16 candidates
    main debug: looking for extension module matching "any": 1 candidates
    lua debug: Opening Lua Extension module
    lua debug: Trying Lua scripts in C:\Users\cg371\AppData\Roaming\vlc\lua\extensions
    lua debug: Trying Lua scripts in D:\VLC\lua\extensions
    lua debug: Trying Lua playlist script D:\VLC\lua\extensions\VLSub.luac
    lua debug: Scanning Lua script D:\VLC\lua\extensions\VLSub.luac
    lua debug: Script D:\VLC\lua\extensions\VLSub.luac has the following capability flags: 0x5
    main debug: using extension module "lua"
    main debug: using interface module "qt"
    main debug: processing request item: null, node: Playlist, skip: 0
    main debug: rebuilding array of current - root Playlist
    main debug: rebuild done - 1 items, index -1
    main debug: starting playback of new item
    main debug: resyncing on rtp://239.255.0.1:5004
    main debug: rtp://239.255.0.1:5004 is at 0
    main debug: creating new input thread
    main debug: Creating an input for 'rtp://239.255.0.1:5004'
    main debug: requesting art for new input thread
    main debug: using timeshift granularity of 50 MiB
    main debug: using timeshift path: C:\Users\cg371\AppData\Local\Temp
    main debug: `rtp://@239.255.0.1:5004' gives access `rtp' demux `any' path `@239.255.0.1:5004'
    main debug: creating demux: access='rtp' demux='any' location='@239.255.0.1:5004' file='\\@239.255.0.1:5004'
    main debug: looking for access_demux module matching "rtp": 15 candidates
    main debug: net: opening 239.255.0.1 datagram port 5004
    qt debug: IM: Setting an input
    main debug: looking for meta fetcher module matching "any": 1 candidates
    lua debug: Trying Lua scripts in C:\Users\cg371\AppData\Roaming\vlc\lua\meta\fetcher
    lua debug: Trying Lua scripts in D:\VLC\lua\meta\fetcher
    main debug: no meta fetcher modules matched
    main debug: looking for art finder module matching "any": 2 candidates
    lua debug: Trying Lua scripts in C:\Users\cg371\AppData\Roaming\vlc\lua\meta\art
    lua debug: Trying Lua scripts in D:\VLC\lua\meta\art
    lua debug: Trying Lua playlist script D:\VLC\lua\meta\art\00_musicbrainz.luac
    lua debug: skipping script (unmatched scope) D:\VLC\lua\meta\art\00_musicbrainz.luac
    lua debug: Trying Lua playlist script D:\VLC\lua\meta\art\01_googleimage.luac
    lua debug: skipping script (unmatched scope) D:\VLC\lua\meta\art\01_googleimage.luac
    lua debug: Trying Lua playlist script D:\VLC\lua\meta\art\02_frenchtv.luac
    lua debug: skipping script (unmatched scope) D:\VLC\lua\meta\art\02_frenchtv.luac
    lua debug: Trying Lua playlist script D:\VLC\lua\meta\art\03_lastfm.luac
    main debug: using access_demux module "rtp"
    main debug: looking for meta reader module matching "any": 2 candidates
    lua debug: Trying Lua scripts in C:\Users\cg371\AppData\Roaming\vlc\lua\meta\reader
    lua debug: Trying Lua scripts in D:\VLC\lua\meta\reader
    lua debug: Trying Lua playlist script D:\VLC\lua\meta\reader\filename.luac
    lua debug: skipping script (unmatched scope) D:\VLC\lua\meta\art\03_lastfm.luac
    main debug: no art finder modules matched
    main debug: no meta reader modules matched
    main debug: `rtp://@239.255.0.1:5004' successfully opened
    main debug: looking for meta fetcher module matching "any": 1 candidates
    lua debug: Trying Lua scripts in C:\Users\cg371\AppData\Roaming\vlc\lua\meta\fetcher
    lua debug: Trying Lua scripts in D:\VLC\lua\meta\fetcher
    main debug: no meta fetcher modules matched
    main debug: looking for art finder module matching "any": 2 candidates
    lua debug: Trying Lua scripts in C:\Users\cg371\AppData\Roaming\vlc\lua\meta\art
    lua debug: Trying Lua scripts in D:\VLC\lua\meta\art
    lua debug: Trying Lua playlist script D:\VLC\lua\meta\art\00_musicbrainz.luac
    lua debug: Trying Lua playlist script D:\VLC\lua\meta\art\01_googleimage.luac
    lua debug: Trying Lua playlist script D:\VLC\lua\meta\art\02_frenchtv.luac
    lua debug: Trying Lua playlist script D:\VLC\lua\meta\art\03_lastfm.luac
    main debug: no art finder modules matched
    main debug: exiting
    main debug: exiting
    main debug: no exit handler
    main debug: removing all interfaces
    main debug: removing module "qt"
    main debug: deactivating the playlist
    main debug: incoming request - stopping current input
    main debug: removing module "rtp"
    main debug: dead input
    main debug: nothing to play
    main debug: removing module "mmdevice"
    qt debug: requesting exit...
    qt debug: waiting for UI thread...
    qt debug: IM: Deleting the input
    qt debug: QApp exec() finished
    qt debug: Video is not needed anymore
    qt debug: Killing extension dialog provider
    qt debug: ExtensionsDialogProvider is quitting...
    main debug: removing module "lua"
    main debug: removing module "win32"
    main debug: removing module "hotkeys"
    main debug: destroying
    main debug: saving media library to file C:\Users\cg371\AppData\Roaming\vlc\ml.xspf.tmp14968
    main debug: looking for playlist export module matching "export-xspf": 4 candidates
    main debug: using playlist export module "export"
    main debug: removing module "export"
    main debug: deleting item `Media Library'
    main debug: deleting item `rtp://239.255.0.1:5004'
    main debug: deleting item `Playlist'
    main debug: removing module "memory"
    -- logger module stopped --