gstreamer向appsrc傳送編碼資料的程式碼
上一篇文章中,提供了傳送視訊幀資料的方法。有人問了,這是理想情況,對於編碼資料,怎麼辦?
經過一番折騰,終於找到可用的辦法。下面程式碼,測試通過:
#include <gst/gst.h> static FILE * appSrcFile = NULL; static int read_counter = 0; static char read_buffer[4096]; static void cb_need_data (GstElement *source, guint unused_size, gpointer user_data) { GstBuffer *buffer; GstFlowReturn ret; GstMapInfo map; g_print("%s\n", __func__); if (appSrcFile == NULL) { appSrcFile = fopen("sample_720p.h264", "r"); } size = fread(read_buffer, 1, size, appSrcFile); g_print("read_data() read_counter=%d, size=%d\n", read_counter++, size); if(size == 0) { ret = gst_app_src_end_of_stream(source); g_print("eos returned %d at %d\n", ret, __LINE__); return; } buffer = gst_buffer_new_allocate (NULL, size, NULL); //這兩個方法都可以 #if 0 gst_buffer_fill(buffer, 0, read_buffer, size); #else gst_buffer_map (buffer, &map, GST_MAP_WRITE); memcpy( (guchar *)map.data, read_buffer, gst_buffer_get_size( buffer ) ); #endif g_signal_emit_by_name (source, "push-buffer", buffer, &ret); gst_buffer_unref (buffer); } gint main (gint argc, gchar *argv[]) { GstElement *pipeline, *appsrc, *conv, *videosink; /* init GStreamer */ gst_init (NULL, NULL); GMainLoop* loop = g_main_loop_new (NULL, FALSE); /* setup pipeline */ pipeline = gst_pipeline_new ("pipeline"); appsrc = gst_element_factory_make ("appsrc", "source"); conv = gst_element_factory_make ("videoconvert", "conv"); videosink = gst_element_factory_make ("xvimagesink", "videosink"); gst_bin_add_many (GST_BIN (pipeline), appsrc, conv, videosink, NULL); gst_element_link_many (appsrc, conv, videosink, NULL); /* setup appsrc */ g_signal_connect (appsrc, "need-data", G_CALLBACK (cb_need_data), NULL); g_object_set( appsrc, "stream-type", GST_APP_STREAM_TYPE_STREAM, NULL ); /* play */ gst_element_set_state (pipeline, GST_STATE_PLAYING); g_main_loop_run (loop); /* clean up */ gst_element_set_state (pipeline, GST_STATE_NULL); gst_object_unref (GST_OBJECT (pipeline)); g_main_loop_unref (loop); return 0; }
相關推薦
gstreamer向appsrc傳送編碼資料的程式碼
上一篇文章中,提供了傳送視訊幀資料的方法。有人問了,這是理想情況,對於編碼資料,怎麼辦? 經過一番折騰,終於找到可用的辦法。下面程式碼,測試通過: #include <gst/gst.h> static FILE * appSrcFile = NU
gstreamer向appsrc傳送資料的程式碼
有一位朋友看了吾《gstreamer向appsrc傳送幀畫面的程式碼》,表示不知道怎麼填充資料。這個吾正好也做了(當時能找到辦法也是運氣好),就開放出來,希望能給朋友們帶來幫助: #define BUFFER_SIZE 4096 static void callback_
gstreamer向appsrc傳送幀畫面的程式碼
這個程式碼可以正常執行,黑白畫面交替: #include <gst/gst.h> #define VIDEO_WIDTH 384 #define VIDEO_HEIGHT 288 #define VIDEO_FORMAT "RGB16" #defi
OkhttpUtils向後臺傳送Json資料
OkHttp是一個優秀的網路請求框架。通過對OkHttp的封裝,可以極大的擴充套件其效能。 okhttp-utils是一個對OkHttp的封裝庫,原庫由hongyang封裝,我在其基礎上進行了少許的修改,使其更符合我的專案。 1. 在app專案下的build.gradle
在使用ajax向後臺傳送json資料,存在格式不正確的問題
在一次servlet伺服器的專案中,想在前臺使用json向後臺傳送請求,其中data的格式如下: var requestData = { "services": [{ "lightbulb" : [{"alpha":0}], "operat
iOS 向後臺傳送json資料
此處有大坑一個,後臺需要json資料,本以為json和字典一樣傳送,結果後臺接收不到,想盡了一切辦法。。。。 直接上程式碼 - (void)didConfirmButtonClickWithItem:(OrderContentModel *)item { {
iOS 學習日誌 : 向伺服器傳送Json資料
前幾天介面需要我向伺服器傳送一個Json資料,但是利用AFNetWorking中的AFHTTPSessionManager傳送到伺服器,介面接收的串一直是URL編碼過後的串,無法和安卓統一,於是換了另一種方法,利用AFHTTPSessionManager的子類A
c++ HTTP POST請求 向伺服器傳送json資料
本文只是記錄作者學習c++ http已post請求傳送資料 一 .首先要選擇一個第三方庫,我這裡用的是 libcurl 2. 用VS2013開啟工程curl-7.26.0\lib\libcurl.vcproj,可以直接編譯成功,編譯成libcurl.lib靜態庫 二
Multipart/form-data POST檔案上傳詳解 理論 簡單的HTTP POST 大家通過HTTP向伺服器傳送POST請求提交資料,都是通過form表單提交的,程式碼如下:
Multipart/form-data POST檔案上傳詳解 理論 簡單的HTTP POST 大家通過HTTP向伺服器傳送POST請求提交資料,都是通過form表單提交的,程式碼如下: <form method="post"action="http://w.soh
Django中使用ajax post向後臺傳送資料時403 Forbidden (CSRF token missing or incorrect.):的解決辦法
在Django中使用ajax post向後臺傳送資料時會出現403 Forbidden (CSRF token missing or incorrect.): 的報錯。 第一種解決方法: 先看一下ajax的使用方法: $.ajax({ url: '{% url '
ESP8266MOD、刷可以使用AT指令的韌體、作為客戶端向貝殼雲端傳送固定資料
初學ESP8266,先買了一個小的開發板,下面總結一下使用過程中的經驗,以便備用,有不合適的還望指正!謝謝! 硬體部分 1. ESP8266MOD 2. usb資料線一根 3. 圖片如下 硬體準備好之後,直接用資料線連線到電腦即可,然後找到所對應的COM口,記下
Go語言(伺服器開發):客戶端向伺服器傳送資料並接收返回資料
客戶端向伺服器傳送資料並接收返回資料。 示例程式碼: package mysocket import ( "fmt" "io" "net" ) func MySocketBase() { var ( host = "www.apache.org" p
flask 後端傳送sockerio請求向前端推送資料
# encoding:utf-8 # !/usr/bin/env python ##import psutil import time from threading import Lock import paramiko from flask import Flask, render_temp
通過Thrift source向Flume傳送資料的Python實現
目前Flume支援Thrift source,即通過一個Thrift服務來收集資料(這一點和scribe是一樣的),然後通過相應的channel傳送到sink中去。以下是具體的實現過程: 環境:Python 2.7.5/CDH4.3 Flume 1.3/Thrift 0.9
Python Django 前後端資料互動 之 後端向前端傳送資料 Django 前後臺的資料傳遞
Django 前後臺的資料傳遞 嚴正宣告: 作者: psklf 出處: http://www.cnblogs.com/psklf/archive/2016/05/30/5542612.html 歡迎轉載,但未經作者同意,必須保留此段宣告;必須在文章中給出原文連線;否則必究法律責任!
Android藍芽搜尋裝置,向其傳送資料並接收
通過藍芽傳輸資料與Socket類似。在網路中使用Socket和ServerSocket控制客戶端和服務端的資料讀寫。而藍芽通訊也由客戶端和服務端Socket來完成。藍芽客戶端Socket是BluetoothSocket,藍芽服務端Socket是BluetoothServerSocket。這兩個類都在包
c++通過Thrift向flume傳送資料
在flume原始碼包apache-flume-1.7.0-src\flume-ng-sdk\src\main\thrift\flume.thrift 目錄下,有Flume的Thrift介面定義(IDL)語言,通過該Thrift可以生成客戶端模組基礎程式碼,此處我們生成相應的
kafka原始碼解析之十六生產者流程(客戶端如何向topic傳送資料)
客戶端向topic傳送資料分為兩種方式:1.非同步,2同步。其配置為producer.type,如果為sync,則是同步傳送;如果為async,則是非同步傳送。 客戶端程式碼如下: import kafka.javaapi.producer.Producer; import
post請求向伺服器傳送資料
package com.xreal.arsearch.utils; import android.util.Log; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.
安卓向伺服器傳送資料和伺服器接收資料全過程
注意:如果開啟輸出流了 客戶端的請求方法是GET,就會請求到伺服器的POST方法去 安卓端: package com.example.k.servletdemo; import android.app.Activity; import android.os.Bund